Ant*_*ols 6 c# sortedlist c#-4.0
我正在寻找加速合并两个代码的代码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);
}
Run Code Online (Sandbox Code Playgroud)
我认为联合而不是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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4412 次 |
| 最近记录: |