我有一个正确排序的ID的int数组。然后我有一个具有ID属性的无序对象数组。
我想按ID排序符合int数组顺序的对象。
的内容
newObjectArray = oldObjectArray.MatchOrderBy(IdArray)
最可取的
我觉得我应该能够使用LINQ完成此任务,但我还没有找到办法。
我当前的方法看起来效率不高,因为它必须查询集合的每次迭代。我怀疑性能会因足够大的集合而受到影响。最终会发生这种情况。
这是我目前的实施:
//this is just dummy data to show you whats going on
int[] orderedIDs = new int[5] {5534, 5632, 2334, 6622, 2344};
MemberObject[] searchResults = MyMethodToGetSearchResults();
MemberObject[] orderedSearchResults = new MemberObject[orderedIDs.Count()];
for(int i = 0; i < orderedIDs.Count(); i++)
{
orderedSearchResults[i] = searchResults
.Select(memberObject => memberObject)
.Where(memberObject => memberObject.id == orderedIDs[i])
.FirstOrDefault();
}
答案 0 :(得分:4)
蛮力实施:
MemberObject[] sortedResults =
IdArray.Select(id => searchResults
.FirstOrDefault( item => item.id == id ))
但是,这需要重复IdArray中每个项目的searchResults,并且不会过于巧妙地处理具有重复ID的项目。
如果您对搜索结果进行ILookup,情况会有所改善,因此在IdArray中抓取每个项目的正确搜索结果现在是O(1)时间。
ILookup<int, MemberObject> resultLookup = searchResults.ToLookup(x => x.id);
现在:
MemberObject[] sortedResults =
IdArray.SelectMany(id => resultLookup[id])