我有两个(不同类型的)IList,a
和b
。
它们大小相同是因为
每个a.G.Id都与一个b.G.Id完全匹配。
b
被排序(由于OrderBy(b=>b.SortVal)
。现在我要对列表a
进行排序。
(如果我有一个a.SortVal
,并且不用第二个列表就可以对a
进行排序,那么经典的排序算法会有所帮助,但事实并非如此)。
答案 0 :(得分:1)
var dic = a.ToDictionary(x => x.gId);
var aSorted = b.Select(x => dic[x.G.Id];
应该做
基本上创建一个字典来按a
来标识gId
的项目,然后在循环b
的(排序的)项目时使用它应返回{{1 }}按照a
中的顺序进行。
该词典用于使查找比扫描更快。
答案 1 :(得分:0)
您可以执行以下操作:
a = a.OrderBy(x => b.FindIndex(b.G.Id == x.gId));
我之前已经回答了一个类似这样的问题-Sort a list by a custom order-但这并不是一个完全重复的问题。
答案 2 :(得分:0)
初始化.Include(x=>x.G)
时,我做了b
。
然后,我定义并初始化了一个新列表bIds=b.Select(b=>b.G.Id).ToList();
和
a = a.OrderBy(x => bIds.IndexOf(x.G.Id)).ToList();
做到了。