按照另一个未完成和修改列表

时间:2016-04-20 15:43:23

标签: c# list sorting

我有两个列表,其中一个是另一个的子集修改子集。例如:

List<string> list1 = new List<string>(){ "A1", "A2", "A3" };
List<string> list2 = new List<string>() { "AA2", "B1", "B2", "AA1", "B3", "AA2" };

我想对第二个列表进行排序,使其具有与第一个类似的顺序,如下所示:

List<string> list2 = new List<string>() { "AA1", "AA2", "AA3", "B1", "B2", "B3" };

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

假设<div id="container"> <div id="a">A</div> <div id="b">B</div> <div id="c">C</div> </div>项是list1项的子集(子字符串),您可以使用list2Linq函数执行此类操作。我不确定它是最优的,但有效。建议欢迎改进答案。

我们的想法是为相应的string项找到list1项的索引(如果找不到项,那么最大索引),然后根据索引List2找到Sort串/项目。

ThenBy

<强>输出

    List<string> list1 = new List<string>(){ "A1", "A2", "A3" };
    List<string> list2 = new List<string>() { "AA2", "B1", "B3", "AA1", "B2", "AA3" };


    var results = list2.Select(s=> 
    {
        var ind = list1.IndexOf(list1.Find(f=> s.Contains(f)));

        return new 
        { 
            index= ind==-1? int.MaxValue : ind, // assign max value if item is not found to place in the end in order. 
            item =s 
        };

    }).OrderBy(o=>o.index).ThenBy(o=>o.item).Select(s=>s.item); 

选中此Demo