Как объединить два словаря без цикличного выполнения?

Ваше определение верно. Если вы перейдете на вкладку Model , вы увидите обязательные поля, указанные в схеме тела.

Swagger UI indicates required schema fields in the Model rather than Example Value

45
задан TylerH 29 April 2016 в 14:05
поделиться

4 ответа

var d3 = d1.Concat(d2).ToDictionary(x => x.Key, x => x.Value);
91
ответ дан SLaks 26 November 2019 в 20:51
поделиться

Можно использовать Concat:

Dictionary<string, object> d1 = new Dictionary<string, object>();
d1.Add("a", new object());
d1.Add("b", new object());
Dictionary<string, object> d2 = new Dictionary<string, object>();
d2.Add("c", new object());
d2.Add("d", new object());

Dictionary<string, object> d3 = d1.Concat(d2).ToDictionary(e => e.Key, e => e.Value);

foreach (var item in d3)
{
    Console.WriteLine(item.Key);
}
42
ответ дан Thomas Ayoub 26 November 2019 в 20:51
поделиться

Сначала это не возможно без цикличного выполнения. Сделан ли тот цикл в (дополнительном) методе, не важно, он все еще требует цикла.

Я на самом деле собираюсь рекомендовать делать его вручную. Все другие данные ответы требуют использования двух методов расширения (Concat - ToDictionary и SelectMany - ToDictionary) и таким образом цикличное выполнение дважды. При выполнении этого для оптимизации кода, это будет быстрее, чтобы сделать цикл по словарю B и добавить, что это - содержание к словарю A.

Править: После дальнейшего расследования деятельность Concat только произошла бы во время вызова ToDictionary, но я все еще думаю, что пользовательский дополнительный метод был бы более эффективным.

Если Вы хотите уменьшить свой размер кода, то просто делают дополнительный метод:

public static class DictionaryExtensions
{
    public static IDictionary<TKey,TVal> Merge<TKey,TVal>(this IDictionary<TKey,TVal> dictA, IDictionary<TKey,TVal> dictB)
    {
        IDictionary<TKey,TVal> output = new Dictionary<TKey,TVal>(dictA);

        foreach (KeyValuePair<TKey,TVal> pair in dictB)
        {
            // TODO: Check for collisions?
            output.Add(pair.Key, Pair.Value);
        }

        return output;
    }
}

Затем можно использовать его путем импорта ('использование') пространства имен DictionaryExtensions и запись:

IDictionary<string,objet> output = dictA.Merge(dictB);

Я заставил метод действовать как объекты, неизменны, но Вы могли легко изменить его, чтобы не возвратить новый словарь и просто объединиться в изречения.

9
ответ дан Richard Szalay 26 November 2019 в 20:51
поделиться
var result = dictionaries.SelectMany(dict => dict)
             .ToDictionary(pair => pair.Key, pair => pair.Value);
5
ответ дан Konstantin Tarkus 26 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: