我有一个列表,其中包含一些标识符,如下所示:
List<long> docIds = new List<long>() { 6, 1, 4, 7, 2 };
此外,我还有另一个<T>
条目列表,由上面描述的I表示。
List<T> docs = GetDocsFromDb(...)
我需要在两个集合中保持相同的顺序,以便List<T>
中的项必须与第一个中的项位于相同的位置(由于搜索引擎评分原因)。而且这个过程不能在GetDocsFromDb()
函数中完成。
如果需要,可以将第二个列表更改为其他结构(例如Dictionary<long, T>
),但我不希望更改它。
有没有什么简单有效的方法可以用LINQ来完成这个“依赖于某些Is的指定”?
发布于 2013-03-07 23:42:23
docs = docs.OrderBy(d => docsIds.IndexOf(d.Id)).ToList();
发布于 2019-04-12 19:11:28
Jodrell的答案是最好的,但实际上他重新实现了System.Linq.Enumerable.Join
。Join还使用Lookup并保持源的顺序。
docIds.Join(
docs,
i => i,
d => d.Id,
(i, d) => d);
发布于 2013-03-07 23:44:01
一种简单的方法是压缩排序序列:
List<T> docs = GetDocsFromDb(...).Zip(docIds, Tuple.Create)
.OrderBy(x => x.Item2).Select(x => x.Item1).ToList();
https://stackoverflow.com/questions/15275269
复制相似问题