Группировка списка словарей значений ключей в c # с использованием linq

#c# #.net #linq

#c# #.net #linq

Вопрос:

У меня есть следующие List<Dictionary<string, string>> пары ключей:

введите описание изображения здесь

Как бы я написал свой запрос Linq, чтобы у меня был только 1 словарь, где значения сгруппированы по ключу?

Комментарии:

1. Вы что-нибудь пробовали? Linq имеет GroupBy и ToDictionary

2. Предоставьте некоторый код, который вы уже пробовали. С какой ошибкой вы столкнулись, если она была? Это не платформа «Сообщество, сделай работу за меня».

3. Также….. Кажется, что вы можете заменить эти словари классом, который имеет 4 свойства

4. Можете ли вы сказать нам, каков именно ваш ожидаемый результат?

5. Да, я пробовал некоторые вещи, и да, я пробовал использовать GroupBy, но я не уверен на 100% в том, как использовать ToDictionary. Вау, это сообщество временами может быть действительно ядовитым. Я разместил здесь только в качестве последнего средства. Да, создание класса было бы самым простым способом, но платформа, которую я использую, уже имеет именно этот класс с этими свойствами, но по причинам, в которые я бы предпочел не вдаваться, я не могу создать экземпляр этого класса. Поэтому мне пришлось бы создать почти точную копию этого класса, чтобы создать его экземпляр и сохранить мои свойства.

Ответ №1:

 var result = data.SelectMany(item => item)
    .GroupBy(item => item.Key)
    .ToDictionary(key => key.Key, value => value.Select(i => i.Value).ToList());
  

Для заданных входных данных:

 List<Dictionary<string, string>> data = new List<Dictionary<string, string>>
{
    new Dictionary<string, string>
    {
        ["Category"] = "99",
        ["Role"] = "11",
        ["Level"] = "22",
        ["BillaleDays"] = "33",
    },
    new Dictionary<string, string>
    {
        ["Category"] = "55",
        ["Role"] = "66",
        ["Level"] = "77",
        ["BillaleDays"] = "88",
    }
};
  

Результат:

 Category : (99,55)
Role : (11,66)
Level : (22,77)
BillableDays : (33,88)
  

Комментарии:

1. @Josh L — Рад, что это помогло 🙂

2. Работает просто очаровательно! Я не использовал . ToDictionary функционирует должным образом. Еще раз спасибо

Ответ №2:

 List<Dictionary<string, string>> data = new List<Dictionary<string,string>>
{
    new Dictionary<string, string>
    {        
        ["Name"] = "one",
        ["Age"] = "22"
    },
    new Dictionary<string, string>
    {
        ["Name"] = "two",
        ["Age"] = "88",
    }
};

var result = data.SelectMany(item => item)
                 .GroupBy(item => item.Key)
                 .ToDictionary(key => key.Key, value => value.Select(i => i.Value).ToList());
  

Вывод:
Name:"one,"two",
Age:"22","88"

Комментарии:

1. Это очень близко к тому, что я хочу, однако я хочу группировать по ключу, а не по значению, чтобы с одним ключом было связано несколько значений.

2. вы можете заменить ключ вместо значения и наоборот Dictionary<int,List<string>> test = sample . GroupBy(r=> r.key) . ToDictionary(t=> t.value, t=> t.Select(r=> r.value). ToList());

3. @Josh я отредактировал свой ответ в соответствии с вашими требованиями, попробуйте один раз и дайте мне знать, если возникнут какие-либо проблемы.

4. @Meena — это почти правильно. Вы просто пропускаете List<Dictionary> часть. Исправьте это, и это тоже будет хороший ответ 🙂

5. @Meena — В настоящее время он не компилируется