gpt4 book ai didi

c# linq GroupBy 关于列表中列表的值

转载 作者:行者123 更新时间:2023-12-04 04:29:46 25 4
gpt4 key购买 nike

我有一个对象列表,在对象中有一个字符串列表。我想要做的是找出每个字符串值有多少。

因此,使用团队中人们所说的语言创建一个简单的示例。

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() 来做到这一点。 .

我只是被困在如何从语言列表中获取各个不同的值。

最佳答案

Demo on dotnet fiddle
您可以使用 SelectMany 获取列表语言列表,然后 GroupBy如你所愿

var result = peopleLanguages
.SelectMany(p => p.Languages)
.GroupBy(p => p);

foreach(var item in result)
{
Console.WriteLine($"{item.Key} : {item.Count()}");
}
输出
English : 3
French : 2
German : 1
Spanish : 1
Greek : 1
Arabic : 1
Italian : 1
Krakozhian : 1

关于c# linq GroupBy 关于列表中列表的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60185504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com