Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# I比较程序未按预期工作_C#_.net_List_Sorting - Fatal编程技术网

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