Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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

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 - Fatal编程技术网

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之前,您必须声明一个完整的新类。(但我想你自己已经找到了医生。)哇,我不知道