C# 对通用列表排序
我正在阅读一篇关于列表排序的教程,遇到了这行代码C# 对通用列表排序,c#,list,C#,List,我正在阅读一篇关于列表排序的教程,遇到了这行代码 myGenericList.Sort((x, y) => String.Compare(x.name, y.name)); 我试着调查这件事,但我就是不明白这句话。有人能给我解释一下这行到底发生了什么吗?它基本上说:要对myGenericList中的2个元素(x&y)进行排序,请使用字符串。比较x&y的属性“name”。它基本上说:要对myGenericList中的2个元素(x&y)进行排序,请使用字符串。比较属性“name”您正在此处创
myGenericList.Sort((x, y) => String.Compare(x.name, y.name));
我试着调查这件事,但我就是不明白这句话。有人能给我解释一下这行到底发生了什么吗?它基本上说:要对myGenericList中的2个元素(x&y)进行排序,请使用字符串。比较x&y的属性“name”。它基本上说:要对myGenericList中的2个元素(x&y)进行排序,请使用字符串。比较属性“name”您正在此处创建一个
匿名函数
函数
排序
接受一个操作委托,其中提供了两个参数x
和y
。
功能的实现遵循=>
,读作“转到”。
然后,使用提供的参数执行String.Compare(x.name,y.name)
。
String.Compare
的返回值是该函数的结果,它也是用于确定列表的排序顺序的函数,您正在这里创建一个匿名函数
函数
排序
接受一个操作委托,其中提供了两个参数x
和y
。
功能的实现遵循=>
,读作“转到”。
然后,使用提供的参数执行String.Compare(x.name,y.name)
。
String.Compare
的返回值是该函数的结果,也是用于确定列表的排序顺序的函数。lammbda表达式可以转换为匹配的委托类型,这就是它工作的原因
有关详细信息,请参阅
在即将发布的.NET4.5(Visual Studio 2012)中,可以通过比较
轻松创建IComparer
。这是通过一个新的静态“工厂”方法比较器实现的。创建有一个排序的重载,它接受一个比较
委托。lammbda表达式可以转换为匹配的委托类型,这就是它工作的原因
有关详细信息,请参阅
在即将发布的.NET4.5(Visual Studio 2012)中,可以通过比较
轻松创建IComparer
。这是通过一个新的静态“工厂”方法Comparer.Create
我想你有一个输入错误。不应该是:mygenericslist.Sort((x,y)=>String.Compare(x.name,y.name))代码>?我想你有打字错误。不应该是:mygenericslist.Sort((x,y)=>String.Compare(x.name,y.name))
?我认为这也应该注意:字符串的结果。Compare是函数的返回值。这个结果就是用来对列表排序的。更准确地说,sort
接受一个参数,这就是委托。该代表具有签名(tx,ty)
(其中T
是列表中的T
)和返回类型int
。请参阅我的答案了解详细信息。因此,x
和y
我的通用列表中的列表项是正确的还是我读错了?确切地说,x
和y
基本上是左侧
和右侧
的比较。因此,x
是您的列表中的一项,以及y
@ios85,我想您可以这么说,是的。x
和y
的类型与列表中项目的类型相同。看起来该类型(类或结构)有一个名为name
的成员,类型为string
。快速排序算法将从列表中尝试大量x
s和y
s,以查看x
是否大于y
(返回int
为正)或小于y
(返回负)。经过多次测试后,它可以得出结论,然后根据您的比较对列表进行排序(lambda arrow=>
)。我认为还应该注意这一点:字符串的结果。Compare
是函数的返回值。这个结果就是用来对列表排序的。更准确地说,sort
接受一个参数,这就是委托。该代表具有签名(tx,ty)
(其中T
是列表中的T
)和返回类型int
。请参阅我的答案了解详细信息。因此,x
和y
我的通用列表中的列表项是正确的还是我读错了?确切地说,x
和y
基本上是左侧
和右侧
的比较。因此,x
是您的列表中的一项,以及y
@ios85,我想您可以这么说,是的。x
和y
的类型与列表中项目的类型相同。看起来该类型(类或结构)有一个名为name
的成员,类型为string
。快速排序算法将从列表中尝试大量x
s和y
s,以查看x
是否大于y
(返回int
为正)或小于y
(返回负)。经过多次测试后,它可以得出结论,该列表将根据您的比较结果进行排序(lambda arrow=>
)。哇,我不知道比较器工厂。我希望他们能将这一点移植到以前版本的框架中(以及所有其他从一开始就应该可用的功能)。@JeffMercado best late than never。如果您只需说:var comp=Comparer.Create((p1,p2)=>p1.Age.CompareTo(p2.Age)),就可以创建一个i比较程序,这将非常好。在.NET4.0之前,您必须声明一个完整的新类。(但我想你自己已经找到了医生。)哇,我不知道