如何在C#中基于另一个已排序列表对IList进行排序?

时间:2019-01-23 14:04:40

标签: c# list sorting

我有两个(不同类型的)IList,ab。 它们大小相同是因为 每个a.G.Id都与一个b.G.Id完全匹配。

b被排序(由于OrderBy(b=>b.SortVal)。现在我要对列表a进行排序。 (如果我有一个a.SortVal,并且不用第二个列表就可以对a进行排序,那么经典的排序算法会有所帮助,但事实并非如此)。

3 个答案:

答案 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();

做到了。

(在https://stackoverflow.com/a/15275394/10357604的帮助下)