gpt4 book ai didi

C# 合并两个排序列表(联合?)

转载 作者:太空狗 更新时间:2023-10-29 23:32:59 29 4
gpt4 key购买 nike

我正在寻找加速一段合并两个 SortedLists 的代码。

C# 4.0 通用 SortedList:http://msdn.microsoft.com/en-us/library/ms132319(v=vs.100).aspx

public Trait getTrait(decimal thisValue)
{
if (ParentStructure != null && ParentStructure.RankedTraits.Count > 0)
{
SortedList<decimal, Trait> tempTraits = this.RankedTraits;

// Improve here (union?)
foreach (KeyValuePair<decimal, Trait> kvp in (ParentStructure.RankedTraits))
{
if (!tempTraits.ContainsKey(kvp.Key))
{
tempTraits.Add(kvp.Key, kvp.Value);
}
}
return _getTrait(tempTraits, thisValue);
}
}
return _getTrait(_rankTraits, thisValue);
}

我认为联合而不是 foreach 循环会更快,但我不知道如何在 SortedList 上实现联合。如果有人可以帮助我,我将不胜感激。

此外,如果总体上有更好的方法,我愿意接受建议。

最佳答案

我能想到的合并两个 SortedList 实例的唯一方法是合并它们,然后转换为查找,然后获取查找集合的第一个元素来制作字典。

我需要制作一本字典,因为 SortedList 只支持逐一添加。因此,唯一的其他选择是将字典注入(inject) SortedList 构造函数。

底线:我认为您当前的代码非常不错。 LINQ 可以帮助将代码减少到大约 2 行(如果您是受虐狂,也可以减少到 1 行)。

SortedList<decimal, Traits> listA = new SortedList<decimal, Traits>();
SortedList<decimal, Traits> listB = new SortedList<decimal, Traits>();

listA.Add(1m, new Traits { FieldName = "One" });
listA.Add(2m, new Traits { FieldName = "Two" });
listA.Add(3m, new Traits { FieldName = "Three" });

listB.Add(1m, new Traits { FieldName = "One" });
listB.Add(4m, new Traits { FieldName = "Four" });
listB.Add(5m, new Traits { FieldName = "Five" });

var listUnion = listA.Union(listB).ToLookup(k => k.Key, v => v.Value)
.ToDictionary(k => k.Key, v => v.First());
var listMerged = new SortedList<decimal, Traits>(listUnion);

关于C# 合并两个排序列表(联合?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13188060/

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