gpt4 book ai didi

c# - 将一个数组的顺序与另一个数组匹配

转载 作者:行者123 更新时间:2023-11-30 15:33:47 26 4
gpt4 key购买 nike

我有一个正确排序的 ID 整数数组。然后我有一个具有 ID 属性的无序对象数组。

我想按与 int 数组顺序匹配的 ID 对对象进行排序。

类似的东西

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();
}

最佳答案

暴力实现:

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])

关于c# - 将一个数组的顺序与另一个数组匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16926821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com