我想加快一段合并两个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只支持逐个添加.因此,唯一的另一种选择是将字典注入SortedList构造函数.
一句话:我认为你现在的代码是相当不错的. LINQ可以帮助将代码减少到大约2行(如果你是受虐狂,则可以使用一行).
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);