我有一些数据,我想对其进行计数和分组。它看起来像这样:
猫猫狗狗狗
我的目标是获得一个对象列表,其中包含动物的名称及其在数据集中出现的次数
对象 1
姓名:猫
出现次数:2
对象 2
名字:狗
出现次数: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);
});
最佳答案
这就是您完成任务所需的全部:
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}");
注意 -
- 由于您的 LINQ 查询当前已编写,因此您无需调用 distinct 或 ToList,因为前者会产生 在不正确的结果中,后者是不必要的。
- 遵循良好的命名约定,您不需要在类型名称后加上 Object 后缀,因此只需 Animal 就足够了。
关于c# - 使用 LINQ 按字符串出现选择和分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46920411/