按另一个不完整和修改列表的顺序对列表进行排序
本文关键字:列表 顺序 排序 修改 另一个 | 更新日期: 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
项的子集(子字符串),则可以使用 Linq
和 string
函数执行类似操作。我不确定它是最佳的,但有效。欢迎提出建议以改进答案。
这个想法是为相应的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