#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 — В настоящее время он не компилируется