Преобразовать словарь <string, int> в словарь <int, List <string>> - PullRequest
0 голосов
/ 28 августа 2018

Q Как наиболее эффективно конвертировать Dictionary<string, int> to a Dictionary<int, List<string>>?

Пример

var input = new Dictionary<string, int>() { {"A", 1}, {"B", 1}, {"C", 2} ...
Dictionary<int, List<string>> result = Transform(input)
Assert.IsTrue(result, { {1, {"A", "B"}}, {2, {"C"}} ... });

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Как насчет этого?

var result = 
    dict.ToLookup(x => x.Value, x => x.Key)
    .ToDictionary(y => y.Key, y => y.ToList());

Хотя я не понимаю, почему нельзя просто использовать результат из dict.ToLookup(), не изменив его на словарь, например:

var dict = new Dictionary<string, int>
{
    {"One", 1},
    {"Two", 2},
    {"1", 1},
    {"TWO", 2},
    {"ii", 2}
};

var test = dict.ToLookup(x => x.Value, x => x.Key);

Console.WriteLine(string.Join(", ", test[2])); // Prints: Two, TWO, ii
0 голосов
/ 28 августа 2018

Вы можете использовать Linq для достижения.

    private static Dictionary<int, List<string>> Transform(Dictionary<string, int> input)
    {
        var result = new Dictionary<int, List<string>>();
        foreach (var value in input.Select(x => x.Value).Distinct())
        {
            var lst = input.Where(x => x.Value == value).Select(x => x.Key).ToList();
            result.Add(value, lst);
        }
        return result;
    }
0 голосов
/ 28 августа 2018

Сгруппируйте словарь по значениям и сопоставьте групповые ключи со списком ключей:

input.GroupBy(x => x.Value).ToDictionary(x => x.Key, x => x.Select(_ => _.Key).ToList())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...