我希望加快一段合并两个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# - C#合并两个SortedLists(联合?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13188060/