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);
在上面的代码中,您找到最大计数,然后找到具有该值的字符。
当我用 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);
在上面的代码中,您找到最大计数,然后找到具有该值的字符。