C#合并两个SortedLists(Union?)
发布时间:2020-12-15 08:49:03 所属栏目:百科 来源:网络整理
导读:我想加快一段合并两个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) { Sorte
我想加快一段合并两个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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |