在C#中加入多个orderedDictionary
本文关键字:orderedDictionary | 更新日期: 2023-09-27 18:21:10
如何有效地合并多个orderedDictionary
?
在C#中,我已经在线检查过了,但我只能看到合并NamevaluePairs的实现。
我正在尝试加入以下已订购的词典:
OrderedDictionary ticketToPickerMapForVerifiedTab = new OrderedDictionary();
OrderedDictionary ticketToPickerMapForHVTab = new OrderedDictionary();
OrderedDictionary ticketToPickerMapForKPTab = new OrderedDictionary();
这些字典中的关键字是唯一的
我需要得到的集合仍然是一个OrderedDictionary对象。
请注意,我的问题与这里提出的问题不同:在C#中合并字典
正如该例子所示,Keyvaluepair<TKey,TValue>,而我的是指使用OrderedDictionary,因为在我的代码中其他地方使用了Ordered Dictionary的特殊功能。
您可以使用LINQ来合并它们。请参阅以下代码:
var dictionariesMerged = ticketToPickerMapForVerifiedTab.Cast<DictionaryEntry>()
.Union(ticketToPickerMapForHVTab.Cast<DictionaryEntry>())
.Union(ticketToPickerMapForKPTab.Cast<DictionaryEntry>());
var dictionary = new OrderedDictionary();
foreach (DictionaryEntry tuple in dictionariesMerged)
dictionary.Add(tuple.Key, tuple.Value);
类似下面的"MergeDictionaries"方法将合并给定词典的内容。这不能处理多个字典中存在一个关键字的情况。
[TestFixture]
public class Class1
{
private OrderedDictionary MergeDictionaries(params OrderedDictionary[] dictionaries)
{
var merged = new OrderedDictionary();
foreach (var dictionary in dictionaries)
{
foreach (DictionaryEntry entry in dictionary)
{
merged.Add(entry.Key, entry.Value);
}
}
return merged;
}
[Test]
public void Test()
{
var d1 = new OrderedDictionary
{
{"x", "v1"},
{"b", "v2"},
};
var d2 = new OrderedDictionary
{
{"d", "v3" },
{"c", "v4" }
};
var d3 = new OrderedDictionary
{
{"z", "v5" },
{"y", "v6" }
};
var merged = MergeDictionaries(d1, d2, d3);
var expected = new OrderedDictionary
{
{"b", "v2"},
{"c", "v4" },
{"d", "v3" },
{"x", "v1"},
{"y", "v6" },
{"z", "v5" }
};
Assert.That(merged, Is.EquivalentTo(expected));
}
}