Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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# 好的,这起作用了。到底是什么?_C#_List_Anonymous Methods - Fatal编程技术网

C# 好的,这起作用了。到底是什么?

C# 好的,这起作用了。到底是什么?,c#,list,anonymous-methods,C#,List,Anonymous Methods,我刚刚从一个网站上摘取了这个片段,结果证明它正是我解决这个问题所需要的解决方案 我不知道它是什么(特别是委托和返回部分),并且来源没有解释它 希望能对我有所启发 myList.Sort( delegate(KeyValuePair<String, Int32> x, KeyValuePair<String, Int32> y) { return x.Value.CompareTo(y.Value);

我刚刚从一个网站上摘取了这个片段,结果证明它正是我解决这个问题所需要的解决方案

我不知道它是什么(特别是委托和返回部分),并且来源没有解释它

希望能对我有所启发

myList.Sort(  delegate(KeyValuePair<String, Int32> x, KeyValuePair<String, Int32> y) 
              { 
                return x.Value.CompareTo(y.Value); 
              }
            );
myList.Sort(委托(KeyValuePair x,KeyValuePair y)
{ 
返回x.Value.CompareTo(y.Value);
}
);

它是一个在列表上调用的排序函数,传递给它的是一个委托,由sort()调用该委托来实际比较两个元素

MSDN页上的函数

MyList.Sort有一个参数——负责比较项目的函数,因此可以根据它对列表进行排序

下一步:delegate(x,y)定义函数本身,它接受两个类型为KeyValuePair[String,Int32]的参数

括号{…}中的内容是实际的比较逻辑:

return x.Value.CompareTo(y.Value);
它根据不同的值比较两个整数值

因此,您的列表将根据accending顺序中这些整数的值进行排序


使用C#3.5,我会这样重写它:

mylist.Sort((x,y) => x.Value.CompareTo(y.Value));
public int MyComparisonMethod(KeyValuePair<string, int> x, KeyValuePair<string,int> y)
{
   return x.Value.CompareTo(y.Value);
}
myList.Sort//使用自己的比较函数进行排序
(
//声明compare函数,返回一个int,并接收两个项
代理(键值对x、键值对y)
{
//返回一个整数,指示项是否“相等”-相等是由相应的比较函数实现的。
返回x.Value.CompareTo(y.Value);
}
);

这样想吧。假设你有一个类似这样的方法:

mylist.Sort((x,y) => x.Value.CompareTo(y.Value));
public int MyComparisonMethod(KeyValuePair<string, int> x, KeyValuePair<string,int> y)
{
   return x.Value.CompareTo(y.Value);
}
public int MyComparisonMethod(KeyValuePair x,KeyValuePair y)
{
返回x.Value.CompareTo(y.Value);
}
这基本上取两个值,并对它们进行比较。它返回-1、0或1,具体取决于x是否分别小于、等于或大于y

现在,在封面下,List.Sort使用了快速排序算法。您需要了解的是,它会不断比较列表中的各个元素。它如何知道值a是否大于、小于或等于值b?它调用这个方法,并基于此,它知道。有道理吗

其思想是,您提供了一种机制来比较列表中的两个值,即列表中的一个值。排序使用该机制来进行排序所需的比较

仅供参考

这通常用于需要对自定义类列表进行排序的情况

例如

class Student
{
    int rollID;
    string name;
}

List<Student> students = new List<Student>();

...

students.Sort(delegate(Student x, Student y) { return x.rollID.CompareTo(y.rollID);});
班级学生
{
int-rollID;
字符串名;
}
列出学生=新建列表();
...
Sort(委托(Student x,Student y){return x.rollID.CompareTo(y.rollID);});

这是隐含的,但可能是您应该提到您的“myList”声明。 让我给你写

var myList=new List<KeyValuePair<string, int>>();

希望解释有帮助。

我相信它实际上返回一个int,0等于,小于0等于xy+1,这是为了理解你在做什么,而不是继续下一个你找到的片段。别忘了接受答案。所以在幕后,我假设是这样的:对于列表中的每个keyvaluepair,将当前keyvaluepair中的“value”项与下一个keyvaluepair中的“value”项进行比较。较大的一个插槽比另一个插槽高出一个插槽-我接近了吗?
myList.Sort((x, y) => x.Value.CompareTo(y.Value));
//Sort over Value

myList.Sort((x, y) => x.Key.CompareTo(y.Key));
//Sort over key