Char IComparable 不是吗?

Isn't Char IComparable?

当我用 C# 编写代码时,我在代码中使用 System.Collections.Generic.SortedDictionary<char,int>。 但是当我调用它的 Max() 方法时,它抛出一个异常:

An exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll but was not handled in user code

Additional information: At least one object must implement IComparable.

Char 不执行 IComparable 吗?我该如何解决?

谢谢!

Ps:我的代码很简单:

SortedDictionary<char,int> letter = new SortedDictionary<char,int>;
//some codes
    if (letter.Count != 0) var First = letter.Max();

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);

在上面的代码中,您找到最大计数,然后找到具有该值的字符。