У меня есть словарь, как это:LINQ - Как сгруппировать с помощью словаря <string, string []>?
Dictionary<string, string[]> dic = new Dictionary<string,string[]>(){
{"A", new string [] {"1", "2", "$", "3", "4"}},
{"B", new string [] {"5", "6", "$", "7", "8"}},
{"C", new string [] {"9", "10", "@", "11", "12"}}
};
, и я хотел бы, чтобы превратить его в новый словарь, как это:
Dictionary<string, List<string[]>> res = new Dictionary<string,List<string[]>>{
{"$", new List<string[]> {
new string [] {"1", "2", "A", "3", "4"},
new string [] {"5", "6", "B", "7", "8"}
}
},
{"@", new List<string[]> {
new string [] {"9", "10", "C", "11", "12"}
}
}
};
поэтому новый ключ становится 3-й элемент из старый строковый массив, а старый ключ добавляется в новый массив строк.
примечание - старый ключ не нужно размещать как третий элемент нового массива, но он должен быть в одном и том же индексе для каждого нового массива.
Я начал пытаться использовать некоторую LINQ для этого, но не могу обернуть мою голову вокруг всего этого - это:
Dictionary<string, string[]> test = dic.GroupBy(x => x.Value[2])
.ToDictionary(s => s.Key, s => s.Select(x => x.Key).ToArray());
работает только для создания другой строки шпоночного массива оцененного словаря, где ключ правильно становятся 3-м элементом, но значения - это только старые ключи.
Это не работает, потому что 'group.Key' является $ или @, а не оригинальные ключи A, B и C. – juharr
@juharr ах, Ты прав. См. Обновленный ответ. –