C# 如何使用IComparer实现自定义排序<;T>;在C中#
我有一个名称列表,如下所示,我想通过实现C# 如何使用IComparer实现自定义排序<;T>;在C中#,c#,sorting,icomparer,C#,Sorting,Icomparer,我有一个名称列表,如下所示,我想通过实现IComparer来实现自定义排序。此自定义排序必须检查两个项目的名字,如果它们相同,则应将它们合并在一起。例如,最终的结果是 John Locke John Doe Elizabeth Davis Elizabeth Hurley Ashley Williams 我不想按名字排序,我只想把名字相似但姓氏不同的人放在一起 类程序 { 静态void Main(字符串[]参数) { 列表名称=新列表 { 新名称{First
IComparer
来实现自定义排序。此自定义排序必须检查两个项目的名字,如果它们相同,则应将它们合并在一起。例如,最终的结果是
John Locke
John Doe
Elizabeth Davis
Elizabeth Hurley
Ashley Williams
我不想按名字排序,我只想把名字相似但姓氏不同的人放在一起
类程序
{
静态void Main(字符串[]参数)
{
列表名称=新列表
{
新名称{FirstName=“John”,LastName=“Locke”},
新名字{FirstName=“伊丽莎白”,LastName=“戴维斯”},
新名称{FirstName=“John”,LastName=“Doe”},
新名称{FirstName=“Ashley”,LastName=“Williams”},
新名称{FirstName=“Elizabeth”,LastName=“Hurley”}
};
foreach(名称中的名称)
{
WriteLine($“{name.FirstName,-10}{name.LastName,-10}”);
}
Console.WriteLine(“\n\n”);
List sorted=names.OrderBy(o=>o,new NameComparer()).ToList();
foreach(已排序的名称)
{
WriteLine($“{name.FirstName,-10}{name.LastName,-10}”);
}
Console.ReadKey();
}
}
公共密封类名
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
公共密封类名称比较程序:IComparer
{
公共整数比较(名称x,名称y)
{
}
}
根据您的要求,对名字进行简单的字典排序就足够了:
public sealed class NameComparer : IComparer<Name>
{
public int Compare(Name x, Name y) => x.FirstName.CompareTo(y.FirstName);
}
公共密封类名称比较器:IComparer
{
public int Compare(Name x,Name y)=>x.FirstName.CompareTo(y.FirstName);
}
- 若结果小于0,则第一个参数小于第二个
- 如果结果为0,则参数的顺序相同
- 否则,二比一小
LastName
的项目,您可以使用默认字符串比较来比较FirstName
:
public sealed class NameComparer : IComparer<Name>
{
public int Compare(Name x, Name y)
{
return x.FirstName.CompareTo(y.FirstName);
}
}
公共密封类名称比较器:IComparer
{
公共整数比较(名称x,名称y)
{
返回x.FirstName.CompareTo(y.FirstName);
}
}
这段代码有什么问题吗?@PavelAnikhouski我不知道如何在Compare()中实际执行。简单的names.OrderBy(x=>x.FirstName)。ThenBy(x=>x.LastName)。ToList()有什么问题代码>?@Vahid,对不起,我显然不明白你说的“聚在一起”是什么意思。请澄清。@Vahid,再次打开问题,我已经和IComparer
:)嗨,盲了,我不想打乱列表的一般顺序,只想把名字相同的人拉近一点。@Vahid这个“聚在一起”/“拉近一点”让每个人都感到困惑,我的朋友。特别是因为你的问题标题是关于“排序”的。根据定义,排序是顺序的改变。@GeorgeKerwood我同意,我找不到正确的措辞。@GeorgeKerwood我想的是,列表首先有一个顺序,我想以一种方式排序,将具有相似名字的项目聚集在一起。“我想让名字相似的项目聚集在一起。”这正是迄今为止两个答案给你的答案,也是你最有可能得到的答案,直到有人因为你的问题格式不正确而关闭你的问题,不管你投了反对票。
public sealed class NameComparer : IComparer<Name>
{
public int Compare(Name x, Name y)
{
return x.FirstName.CompareTo(y.FirstName);
}
}