C# Isn';不可比较?
当我在C#中编码时,我在代码中使用C# Isn';不可比较?,c#,win-universal-app,sorteddictionary,C#,Win Universal App,Sorteddictionary,当我在C#中编码时,我在代码中使用System.Collections.Generic.SortedDictionary。 但是当我调用它的Max()方法时,它会抛出一个异常: mscorlib.ni.dll中发生“System.ArgumentException”类型的异常,但未在用户代码中处理 附加信息:至少一个对象必须实现IComparable Char是否实现了IComparable?我怎样才能解决它 谢谢 Ps:我的代码很简单: SortedDictionary<char,int
System.Collections.Generic.SortedDictionary
。
但是当我调用它的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();
SortedDictionary字母=新的SortedDictionary;
//一些代码
如果(letter.Count!=0)var First=letter.Max();
Max()
是IEnumerable
的扩展方法,并且SortedDictionary
实现IEnumerable
问题是KeyValuePair
不可i比较
如果需要最大密钥,可以使用密钥
属性:
SortedDictionary<char, int> dict = new SortedDictionary<char, int>();
...
var key = dict.Keys.Max();
var value = dict[key];
SortedDictionary dict=新的SortedDictionary();
...
var key=dict.Keys.Max();
var值=dict[键];
编辑:
如果要计算字符重复的次数,请不要使用SortedDictionary
,添加到集合中的每个元素都需要O(logn)。最后,添加过程将进行O(n logn)操作
在您的情况下,简单的字典
或数组更合适:
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);
var dict=newdictionary();
foreach(字符中的字符c)
{
如果(!dict.ContainsKey(c))
dict[c]=0;
dict[c]++;
}
var maxValue=dict.Values.Max();
var keyValues=dict.Where(kv=>kv.Value==maxValue);
在上面的代码中,您可以找到最大计数,然后找到具有该值的字符。max()
是IEnumerable
和SortedDictionary
的扩展方法
问题是KeyValuePair
不可i比较
如果需要最大密钥,可以使用密钥
属性:
SortedDictionary<char, int> dict = new SortedDictionary<char, int>();
...
var key = dict.Keys.Max();
var value = dict[key];
SortedDictionary dict=新的SortedDictionary();
...
var key=dict.Keys.Max();
var值=dict[键];
编辑:
如果要计算字符重复的次数,请不要使用SortedDictionary
,添加到集合中的每个元素都需要O(logn)。最后,添加过程将进行O(n logn)操作
在您的情况下,简单的字典
或数组更合适:
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);
var dict=newdictionary();
foreach(字符中的字符c)
{
如果(!dict.ContainsKey(c))
dict[c]=0;
dict[c]++;
}
var maxValue=dict.Values.Max();
var keyValues=dict.Where(kv=>kv.Value==maxValue);
在上面的代码中,您可以找到最大计数,然后找到具有该值的字符。您究竟如何调用
max()
?很明显。问题在于您编写代码的方式——因此:显示您的代码。var c=new[]{'a','b'};c.Max()代码>工作正常。直接测试Char ch='A';布尔结果=ch是i可比较的代码>返回true
@jeroenvanevel我已经更新了我的问题并添加了代码。谢谢你的帮助!你到底怎么调用Max()
?很明显。问题在于您编写代码的方式——因此:显示您的代码。var c=new[]{'a','b'};c.Max()代码>工作正常。直接测试Char ch='A';布尔结果=ch是i可比较的代码>返回true
@jeroenvanevel我已经更新了我的问题并添加了代码。谢谢你的帮助!非常感谢。实际上,我想得到一对具有最大值的。我怎么做@黄煜恒: SortedDictionary是按键排序的,实际上获取最大值或最小值的最佳方法是使用Last()
或First()
,因为集合已经排序。但是,如果您想通过最大值获取该对,可以使用dict.Values:var value=dict.Values.Max()代码>和键:var key=dict.Keys.First(k=>dict[k]==value)
但是如果这是您想要的,那么使用字典,比如SortedDictionary
,使用您的实际值作为键。我的目的是计算特定的char
在一篇文章中出现的次数(使用int
)。因此,如果我使用int
作为键,可能会有许多相同的int
,我认为在SortedDictionary
中不能复制键。或者你能告诉我其他更适合我的数据结构吗@黄煜恒: 更新的回答我应该支持utf-8,所以我认为字典
更适合我。但是我不能理解字典
和分类字典
之间的区别。为什么字典
更合适?谢谢!实际上,我想得到一对具有最大值的。我怎么做@黄煜恒: SortedDictionary是按键排序的,实际上获取最大值或最小值的最佳方法是使用Last()
或First()
,因为集合已经排序。但是,如果您想通过最大值获取该对,可以使用dict.Values:var value=dict.Values.Max()代码>和键:var key=dict.Keys.First(k=>dict[k]==value)
但是如果这是您想要的,那么使用字典,比如SortedDictionary
,使用您的实际值作为键。我的目的是计算特定的char
在一篇文章中出现的次数(使用int
)。因此,如果我使用int
作为键,可能会有许多相同的int
,我认为在SortedDictionary
中不能复制键。或者你能告诉我其他更适合我的数据结构吗@黄煜恒: 更新的回答我应该支持utf-8,所以我认为字典
更适合我。但是我不能理解字典
和分类字典
之间的区别。为什么