按自定义订单对列表进行排序

时间:2017-11-14 19:00:11

标签: c#

我有一些类型的数组

private string[] linkTypes = {
    "dog",
    "cat",
    // and so on ..
};
  

是的,我可以使用enum,但在这种情况下,它必须是一个数组   字符串。

所以现在我有一个名为" LinkElement"

的对象列表
private List<LinkElement> links = new List<LinkElement>();

并且这些对象具有一个名为&#34; Type&#34;

的字符串属性
string linkType = links[index].Type;

如果linkTypes包含元素&#34; dog&#34;和&#34; cat&#34;,我的链接只能有#34; dog&#34;或者&#34; cat&#34;作为他们的类型。

我想对列表进行排序&#34;链接&#34;按linkTypes的顺序。

表示列表顺序包含具有类型&#34; dog&#34;的链接。首先和之后的链接类型&#34; cat&#34;来了。

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

有人能帮助我吗?

3 个答案:

答案 0 :(得分:5)

假设=ROUND(AVERAGE(OFFSET(C7:J30,ROW(C7:J30)-ROW(C7),0,1)),2)(私有字符串数组)与linkTypeslinks的列表)在同一个类中,您可以使用LINQ的OrderBy和简单的lambda表达:

LinkElement

答案 1 :(得分:0)

比较诸如“字母顺序”(字符串)“更大数字”(数字类型)等是使用IComparable接口完成的。您可以在自定义类中实现此接口,以使实例按您喜欢的方式自行排序。阅读界面:

https://msdn.microsoft.com/en-us/library/4d7sx9hd(v=vs.110).aspx

如果你有固定数量的类型,那么你可以使用一个快速帮助方法为每个对象返回一个整数,具体取决于它的类型,并比较每个对象的返回整数,以确定哪一个“首先出现。” / p>

答案 2 :(得分:0)

实施IComparerIComparable界面。使用IComparable的缺点是,这必须由针对排序的类实现,这意味着如果您想在代码中的其他位置以不同的方式对其进行排序,您将无法使用这种机制这样做。另一方面,如果您选择,IComparer可以与目标类分离并以多种方式实现,并且根据应用程序不同部分的排序条件,您可以应用其中一个IComparer根据需要分类。

https://support.microsoft.com/en-us/help/320727/how-to-use-the-icomparable-and-icomparer-interfaces-in-visual-c