Char是不是可以比较?

时间:2016-03-10 14:52:46

标签: c# win-universal-app sorteddictionary

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

  

mscorlib.ni.dll中发生了'System.ArgumentException'类型的异常,但未在用户代码中处理

     

附加信息:至少有一个对象必须实现IComparable。

Char实施IComparable?我该如何解决?

谢谢!

Ps:我的代码很简单:

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

1 个答案:

答案 0 :(得分:4)

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

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