使用我的自定义订单对List <>进行排序,该订单存储在另一个列表(C#)中?

mar*_*ith 7 .net c# sorting visual-studio

任何人都可以帮助..我有一个像这样的通用列表

    IList<itemTp> itemTps;
Run Code Online (Sandbox Code Playgroud)

itemTp基本上是一个类(有许多属性),其中一个属性就是"代码"

我需要能够按照我在另一个列表中设置的特定顺序对其进行排序.

这个列表是一个简单的列表,列出了顺序(从头到尾),比如说

code1 code3 code2 code5(注意它从1到3到2到5 - 这些是名称,它们可以被称为任何东西..重要的是订单,它与数字没有任何关系)

基本上我需要确保itemTp中的项目按照其他列表中的内容进行排序...

所以想象一下我的Ilist就像这个code1,code2,code3,code5 - 所以一旦排序完成了我的

       IList<itemTp>
Run Code Online (Sandbox Code Playgroud)

将包含4个有序的类,并具有类似code1,code3,code2,code5(订单更改)的属性

任何想法如何做到这一点?

ant*_*ony 9

您需要创建一个IComparer,它将根据您的其他列表的状态比较项目.使用IComparer的优点是,如果需要优化,您将能够在类中构建缓存逻辑,以避免重复的IndexOf()查找.此外,您将能够维护多个可在适当时使用的"其他"列表.

class ItemTpComparer : IComparer<itemTp>
{
    private IList<codeTp> otherList;

    public ItemTpComparer(IList<codeTp> otherList)
    {
        this.otherList = otherList;
    }

    public int Compare(itemTp a, itemTp b)
    {
        return otherList.IndexOf(a.Code) - otherList.IndexOf(b.Code);
    }
}
Run Code Online (Sandbox Code Playgroud)

并执行排序:

myList.Sort(new ItemTpComparer(otherList));
Run Code Online (Sandbox Code Playgroud)