如何根据C#中的另一个已排序列表对IList进行排序?
我有两个IList(不同类型),如何根据C#中的另一个已排序列表对IList进行排序?,c#,list,sorting,C#,List,Sorting,我有两个IList(不同类型),a和b。 它们大小一样,因为 每个a.G.Id正好匹配一个b.G.Id. b已排序(因为有一个OrderBy(b=>b.SortVal)。现在我想对列表a进行排序。 (如果我有一个a.SortVal,只对a进行排序,而不需要第二个列表的帮助,经典的排序算法会有所帮助,但事实并非如此) 应该这样做 基本上,创建一个字典,通过gId来识别a中的项目,然后在b中循环(排序)项目时使用它,应该按照b中的顺序返回a中的项目 字典用于使查找比扫描更快。您可以执行以下操作: a
a
和b
。
它们大小一样,因为
每个a.G.Id正好匹配一个b.G.Id.
b
已排序(因为有一个OrderBy(b=>b.SortVal)
。现在我想对列表a
进行排序。
(如果我有一个a.SortVal
,只对a
进行排序,而不需要第二个列表的帮助,经典的排序算法会有所帮助,但事实并非如此)
应该这样做
基本上,创建一个字典,通过gId
来识别a
中的项目,然后在b
中循环(排序)项目时使用它,应该按照b
中的顺序返回a
中的项目
字典用于使查找比扫描更快。您可以执行以下操作:
a = a.OrderBy(x => b.FindIndex(b.G.Id == x.gId));
我以前回答过一个与此类似的问题,但不是完全重复的问题。我确实回答了。在初始化b
时包括(x=>x.G)
。
然后我定义并初始化了一个新列表bIds=b.Select(b=>b.G.Id).ToList();
及
成功了
(在的帮助下)在C#代码中可以使用存储过程(SQL)。但是我应该写一个新的问题:“我没有找到这个案例的副本!”除了搜索精确的副本之外,您还尝试过其他方法吗?到目前为止,您自己的尝试是什么?
a = a.OrderBy(x => b.FindIndex(b.G.Id == x.gId));
a = a.OrderBy(x => bIds.IndexOf(x.G.Id)).ToList();