C#合并两个SortedLists(Union?)

前端之家收集整理的这篇文章主要介绍了C#合并两个SortedLists(Union?)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想加快一段合并两个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);

猜你在找的C#相关文章