C# I比较程序未按预期工作
我的程序的功能是统计文档中出现的唯一单词,然后按排序顺序显示它们。我首先循环遍历所有单词,并将它们输入字典,然后根据遇到它们的次数增加字典中的值。然后,我将字典转换为一个列表,并使用C# I比较程序未按预期工作,c#,.net,list,sorting,C#,.net,List,Sorting,我的程序的功能是统计文档中出现的唯一单词,然后按排序顺序显示它们。我首先循环遍历所有单词,并将它们输入字典,然后根据遇到它们的次数增加字典中的值。然后,我将字典转换为一个列表,并使用IComparer作为参数调用.Sort方法。在此代码中显示: List<KeyValuePair<string,long>> wordList = wordCount.ToList(); IComparer<KeyValuePair<string,long>> com
IComparer
作为参数调用.Sort
方法。在此代码中显示:
List<KeyValuePair<string,long>> wordList = wordCount.ToList();
IComparer<KeyValuePair<string,long>> comparison = new comparator();
wordList.Sort(comparison);
List wordList=wordCount.ToList();
IComparer comparison=新比较器();
排序(比较);
还有我正在使用的IComparer类
public class comparator : IComparer<KeyValuePair<string, long>>
{
public int Compare(KeyValuePair<string, long> x, KeyValuePair<string, long> y)
{
if (x.Value > y.Value)
return 1;
else
return 0;
}
}
公共类比较器:IComparer
{
公共整数比较(键值对x、键值对y)
{
如果(x值>y值)
返回1;
其他的
返回0;
}
}
但是,当我完成排序时,列表并不像我希望的那样按KeyValuePair的值排序。我做错了什么
在比较器实现中,当
y.Value
大于x.Value
时,您缺少以下情况:
public class comparator : IComparer<KeyValuePair<string, long>>
{
public int Compare(KeyValuePair<string, long> x, KeyValuePair<string, long> y)
{
if (x.Value > y.Value)
{
return 1;
}
else if (x.Value < y.Value)
{
return -1;
}
else
return 0;
}
}
您可以在一个查询中完成所有处理(假设words
是包含所有单词的字符串的集合):
在比较器实现中,当
y.Value
大于x.Value
时,您缺少以下情况:
public class comparator : IComparer<KeyValuePair<string, long>>
{
public int Compare(KeyValuePair<string, long> x, KeyValuePair<string, long> y)
{
if (x.Value > y.Value)
{
return 1;
}
else if (x.Value < y.Value)
{
return -1;
}
else
return 0;
}
}
您可以在一个查询中完成所有处理(假设words
是包含所有单词的字符串的集合):
实际上,作为比较方法的结果,您应该返回
1
、0
和-1
。但在您的情况下,您可以使用long
类型中的CompareTo
方法,用于示例:
public class Comparator : IComparer<KeyValuePair<string, long>>
{
public int Compare(KeyValuePair<string, long> x, KeyValuePair<string, long> y)
{
return x.Value.CompareTo(y.Value);
}
}
公共类比较器:IComparer
{
公共整数比较(键值对x、键值对y)
{
返回x.Value.CompareTo(y.Value);
}
}
作为一个好的实践,将类重命名为
Comparator
,而不是Comparator
。保持代码整洁 实际上,作为比较方法的结果,您应该返回1
、0
和-1
。但在您的情况下,您可以使用long
类型中的CompareTo
方法,用于示例:
public class Comparator : IComparer<KeyValuePair<string, long>>
{
public int Compare(KeyValuePair<string, long> x, KeyValuePair<string, long> y)
{
return x.Value.CompareTo(y.Value);
}
}
公共类比较器:IComparer
{
公共整数比较(键值对x、键值对y)
{
返回x.Value.CompareTo(y.Value);
}
}
作为一个好的实践,将类重命名为
Comparator
,而不是Comparator
。保持代码整洁 哦,老兄。就这样。不知怎的,我觉得我只需要一个箱子。谢谢你的回答。10分钟后我会接受的。就这样。不知怎的,我觉得我只需要一个箱子。谢谢你的回答。10分钟后我接受。
public class Comparator : IComparer<KeyValuePair<string, long>>
{
public int Compare(KeyValuePair<string, long> x, KeyValuePair<string, long> y)
{
return x.Value.CompareTo(y.Value);
}
}