Разве Char не совместим?
Когда я кодирую в C#, я используюSystem.Collections.Generic.SortedDictionary<char,int>
в моем коде. Но когда я называю его Max()
Метод, это исключение:
Исключение типа "System.ArgumentException" произошло в mscorlib.ni.dll, но не было обработано в коде пользователя
Дополнительная информация: хотя бы один объект должен реализовывать IComparable.
не Char
воплощать в жизнь IComparable
? Как я могу решить это?
Спасибо!
PS: мой код прост:
SortedDictionary<char,int> letter = new SortedDictionary<char,int>;
//some codes
if (letter.Count != 0) var First = letter.Max();
1 ответ
Max()
это метод расширения IEnumerable<T>
, а также SortedDictionary<TKey, TValue>
воплощать в жизнь IEnumerable<KeyValuePair<TKey, TValue>>
,
Проблема в KeyValuePair<TKey, TValue>
не IComparable
,
Если вы хотите максимальную клавишу, вы можете использовать Keys
имущество:
SortedDictionary<char, int> dict = new SortedDictionary<char, int>();
...
var key = dict.Keys.Max();
var value = dict[key];
РЕДАКТИРОВАТЬ:
Если вы хотите посчитать, сколько раз повторяется символ, не используйте SortedDictionary<TKey, Value>
для каждого элемента, добавляемого в коллекцию, требуется O (log n). В конце процесс добавления займет O(n log n) операций.
В твоем случае простой Dictionary<TKey, TValue>
или массив больше подходит:
var dict = new Dictionary<char, int>();
foreach (char c in chars)
{
if (!dict.ContainsKey(c))
dict[c] = 0;
dict[c]++;
}
var maxValue = dict.Values.Max();
var keyValues = dict.Where(kv => kv.Value == maxValue);
В приведенном выше коде вы найдете максимальное количество, а затем символы с этим значением.