C#合并两个SortedLists(Union?)

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.如果有人可以帮助我,我会很感激.

此外,如果有更好的方法来做到这一点,我愿意接受建议.

cod*_*ife 3

我能想到的合并两个实例的唯一方法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)