Разве 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);

В приведенном выше коде вы найдете максимальное количество, а затем символы с этим значением.

Другие вопросы по тегам