Объединение 3 словарей в один словарь - PullRequest
4 голосов
/ 02 ноября 2010
I have the following 

Dictionary<string,string> dict1 has 3 items
"A"="1.1"
"B"="2.1"
"C"="3.1"

Dictionary<string,string> dict2 has 3 items
"A"="1.2"
"B"="2.2"
"C"="3.2"

Dictionary<string,string> dict2 has 3 items
"A"="1.3"
"B"="2.3"
"C"="3.3"

I want a final Dict dictFinal which is of type Dictionary<string,string[]>

"A"="1.1,1.2,1.3"
"B"="2.1,2.2,2.3"
"C"="3.1,3.2,3.3"

Ответы [ 3 ]

3 голосов
/ 02 ноября 2010

Учитывая аналогичные ключи, предоставьте коллекцию всех словарей и используйте SelectMany для обработки динамического числа элементов массива:

var dictionaries = new[] { dict1, dict2, dict3 };
var result = dictionaries.SelectMany(dict => dict)
                         .GroupBy(o => o.Key)
                         .ToDictionary(g => g.Key,
                                       g => g.Select(o => o.Value).ToArray());

Тип dictionaries может быть List<T>, не обязательномассив, как указано выше.Важно, чтобы вы сгруппировали их в коллекцию, чтобы связать их.

1 голос
/ 02 ноября 2010

Предполагая, что все 3 словаря имеют одинаковые ключи, следующее должно выполнить работу:

var d1 = new Dictionary<string, string>()
             {
                 {"A", "1.1"},
                 {"B", "2.1"},
                 {"C", "3.1"}
             };
var d2 = new Dictionary<string, string>()
             {
                 {"A", "1.2"},
                 {"B", "2.2"},
                 {"C", "3.2"}
             };

var d3 = new Dictionary<string, string>()
             {
                 {"A", "1.3"},
                 {"B", "2.3"},
                 {"C", "3.3"}
             };

var result = d1.Keys.ToDictionary(k => k, v => new[] {d1[v], d2[v], d3[v]});
0 голосов
/ 02 ноября 2010

Если предположить, что у всех одинаковые клавиши, самый прямой путь вперед:

Dictionary<string,string[]> result = new Dictionary<string,string[]>();
foreach(var key in dict1.Keys)
{
    result[key] = new string[]{dict1[key], dict2[key], dict3[key]}; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...