按另一个不完整和修改列表的顺序对列表进行排序

本文关键字:列表 顺序 排序 修改 另一个 | 更新日期: 2024-10-31 01:13:16

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

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" };

我怎样才能做到这一点?

按另一个不完整和修改列表的顺序对列表进行排序

假设list1项是list2项的子集(子字符串),则可以使用 Linqstring 函数执行类似操作。我不确定它是最佳的,但有效。欢迎提出建议以改进答案。

这个想法是为相应的List2项目找到list1项目的索引(如果未找到项目,则为最大索引),然后根据字符串/项目的索引ThenBy进行Sort

    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); 

输出

AA1
AA2
AA3
B1
B2
B3

检查此Demo