C# 按自定义顺序对列表排序
我有一些类型的数组C# 按自定义顺序对列表排序,c#,C#,我有一些类型的数组 private string[] linkTypes = { "dog", "cat", // and so on .. }; 是的,我可以使用枚举,但在这种情况下,它必须是 字符串 现在我有了一个名为“LinkElement”的对象列表 如果链接类型包含元素“dog”和“cat”,则我的链接类型只能是“dog”或“cat”。 我想按链接类型的顺序对列表“链接”进行排序 表示列表顺序包含先有“dog”类型的链接,然后出现“cat”类型的链接 List
private string[] linkTypes = {
"dog",
"cat",
// and so on ..
};
是的,我可以使用枚举
,但在这种情况下,它必须是
字符串
现在我有了一个名为“LinkElement”的对象列表
如果链接类型包含元素“dog”和“cat”,则我的链接类型只能是“dog”或“cat”。
我想按链接类型的顺序对列表“链接”进行排序
表示列表顺序包含先有“dog”类型的链接,然后出现“cat”类型的链接
List sortedLinks=;//排序链接
for(int i=0;i
有人能帮我吗?诸如“字母顺序”(字符串)、“较大的数字”(数字类型)等比较都是使用IComparable接口完成的。您可以在自定义类中实现此接口,使实例按自己喜欢的方式进行排序。请阅读此处的界面:
如果有固定数量的类型,则可以使用快速帮助器方法根据每个对象的类型为其返回一个整数,并比较每个对象返回的整数以确定哪一个“先到”。假设
linkTypes
(私有字符串数组)与links
在同一类中(在LinkElement
的列表中),您可以将LINQ的OrderBy与一个简单的lambda表达式一起使用:
var sortedLinks = links.OrderBy(le => Array.IndexOf(linkTypes, le.linkType)).ToList()
实现
IComparer
或IComparable
接口。使用IComparable
的缺点是,这必须由排序的目标类实现,这意味着如果您想在代码的其他地方以不同的方式对其排序,您将无法使用此mec另一方面,IComparer
可以与目标类解耦,如果您选择,可以通过多种方式实现,并且根据应用程序不同部分的排序标准,您可以根据需要应用其中一个IComparer
类
是的,这很好,但是这里缺少一个参数
IndexOf(le.linkType))
对不起,代码是直接在这里编写的,没有经过测试。现在修好了。总的来说这是一个好主意,但在这种情况下可能是杀伤力太大了。我以前写过很多,但因为我们有LINQ的OrderBy,我甚至不记得写过一个比较器。诚然,使用LINQ可能比其他方法慢一点,但是除非您有真正的性能问题,并且能够确定原因是使用OrderBy,否则谁会在乎呢?
string linkType = links[index].Type;
List<LinkElement> sortedLinks = ; // sort links
for (int i = 0; i < sortedLinks.Count; i++)
{
LinkElement currentLink = sortedLinks[i];
Console.WriteLine(currentLink.Type);
}
// Write down dogs first, cats after
var sortedLinks = links.OrderBy(le => Array.IndexOf(linkTypes, le.linkType)).ToList()