【问题标题】:Join multiple orderedDictionary in C#在C#中加入多个orderedDictionary
【发布时间】:2016-02-09 11:04:20
【问题描述】:

如何有效地合并多个orderedDictionarys?

在 C# 中,我在网上查过,但我只能看到合并 NamevaluePairs 的实现。

我正在尝试加入以下有序词典:

OrderedDictionary ticketToPickerMapForVerifiedTab = new OrderedDictionary();
OrderedDictionary ticketToPickerMapForHVTab = new OrderedDictionary();
OrderedDictionary ticketToPickerMapForKPTab = new OrderedDictionary();

这些字典中的键是唯一的

我需要生成的集合仍然是 OrderedDictionary 对象。

请注意,我的问题与此处提出的问题不同:Merging dictionaries in C#

正如上面演示的 Keyvaluepair 的例子,而我的例子是使用 OrderedDictionary,因为 OrderedDictionary 的特殊功能在我的代码中的其他地方使用。

【问题讨论】:

  • 因为不只是调用 ticketToPickerMapForVerifiedTab.ToList(); AddRange(ticketToPickerMapForHVTab.ToList()) 并再次调用toDictionary
  • @AlexKrupka 我不明白你的建议,你能不能再详细点
  • @Edwin 尝试将您的代码更改为使用SortedDictionary<K,V> 而不是OrderedDictionary,然后您可以轻松使用许多Linq 技巧...
  • @Eser ,抱歉我无法更改,我正在使用orderedDictionary 的索引功能

标签: c# linq ordereddictionary


【解决方案1】:

您可以使用 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);

【讨论】:

  • @Edwin 你想加入他们还是合并?因为如果你想加入,你将有 3 个值到同一个键。
  • 我想合并它们,我现在要编辑问题
【解决方案2】:

类似于下面的“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));
    }
}

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 2011-03-02
    • 2011-02-03
    • 2019-03-03
    • 2013-05-17
    • 2011-09-07
    • 2018-06-11
    • 2013-07-08
    • 2021-01-27
    相关资源
    最近更新 更多