【发布时间】:2020-05-27 20:14:38
【问题描述】:
我有一个对象列表,在对象中有一个字符串列表。我想要做的是找出每个字符串值有多少。
因此,要使用团队中的人员使用的语言创建一个简单的示例。
public class PeopleLanguages
{
public string Name;
public List<string> Languages;
}
创建测试数据...
List<PeopleLanguages> peopleLanguages = new List<PeopleLanguages>();
peopleLanguages.Add(new PeopleLanguages { Name = "Rod", Languages = new List<string> { "English", "French", "German" } });
peopleLanguages.Add(new PeopleLanguages { Name = "Jane", Languages = new List<string> { "English", "Spanish", "Greek" } });
peopleLanguages.Add(new PeopleLanguages { Name = "Fredie", Languages = new List<string> { "French", "Arabic", "Italian" } });
peopleLanguages.Add(new PeopleLanguages { Name = "Viktor", Languages = new List<string> { "English", "Krakozhian" } });
可视化数据:
* Rod => English | French | German
* Jane => English | Spanish | Greek
* Fredie => French | Arabic | Italian
* Viktor => English | Krakozhian
我可以通过使用 SelectMany().Distinct() 查找不同的字符串值然后在 foreach 循环中匹配来获得我想要的结果:
foreach (string language in peopleLanguages.SelectMany(p => p.Languages).Distinct())
{
Console.WriteLine($"{language} = {peopleLanguages.Where(p => p.Languages.Contains(language)).Count()}");
}
输出:
English = 3
French = 2
German = 1
Spanish = 1
Greek = 1
Arabic = 1
Italian = 1
Krakozhian = 1
但必须有更好的方法来使用GroupBy()。
我只是不知道如何从语言列表中获取各个不同的值。
【问题讨论】: