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等于x
myList.Sort((x, y) => x.Value.CompareTo(y.Value));
//Sort over Value
myList.Sort((x, y) => x.Key.CompareTo(y.Key));
//Sort over key