我有一些我想要计算和分组的数据。它看起来像这样:
猫猫狗狗狗
我的目标是获取具有动物名称的对象列表及其在数据集中出现的次数
对象1
姓名:猫
NumberAppearances:2
对象2
姓名:狗
NumberAppearances:3
我正在尝试使用LINQ查询执行此操作,这就是我所拥有的,但计数错误。我认为这是计算长度而不是它出现的次数。我该如何修改?
animalData.Select(x => x.AnimalType).Distinct().ToList().ForEach(a =>
AnimalObject animal = new AnimalObject();
animal.Name = a.Name;
animal.Number = a.Distinct().Count();
animalList.Add(animal);
});
答案 0 :(得分:4)
这就是完成任务所需的全部内容:
var result = animalData.GroupBy(x => x.AnimalType).Select(g => new AnimalObject
{
Name = g.Key,
Number = g.Count()
}).ToList();
foreach (var e in result)
Console.WriteLine($"Name: {e.Name} \n NumberAppearances: {e.Number}");
注意 -
答案 1 :(得分:0)
在Dictionary:
的帮助下,您可以在不创建新对象的情况下使用此对象var animalCounts = animalList.GroupBy(a => a.AnimalType).ToDictionary(
grp => grp.Key, grp => grp.ToList().Count());
foreach(var animalCount in animalCounts) {
Console.WriteLine($"Name: {animalCount.Key}{Environment.NewLine}NumberOfApperances: {animalCount.Value}");
}
答案 2 :(得分:0)
按AnimalType对数据进行分组,然后将其转换为AnimalObject。
var result = animalData.GroupBy(x => x.AnimalType)
.Select(g => new AnimalObject { Name = g.Key, Number = g.Count() })
.ToList();