如何在C#中统计列表内相同ProductId的元素数量并将结果存入变量
统计列表中相同ProductId元素数量的实现方法
你需要遍历Product列表,统计每个ProductId对应的元素个数并赋值给指定变量,对吧?这里有几种简洁高效的实现方式,一起来看看:
首先先确认你的基础代码:
public class Product { public int ProductId { get; set; } public string ProductName { get; set; } } List<Product> productList = new() { new Product { ProductName = "item1", ProductId = 1}, new Product { ProductName = "item2", ProductId = 1}, new Product { ProductName = "item3", ProductId = 2}, new Product { ProductName = "item4", ProductId = 2}, new Product { ProductName = "item5", ProductId = 3}, new Product { ProductName = "item6", ProductId = 1} };
方式一:用LINQ GroupBy+字典(推荐,高效灵活)
这种方法只需要遍历一次列表,就能统计所有Id的数量,适合需要统计多个Id的场景:
// 分组统计并转为字典:键是ProductId,值是对应元素的数量 var productCountDict = productList .GroupBy(product => product.ProductId) .ToDictionary(group => group.Key, group => group.Count()); // 从字典中取出对应Id的数量赋值给变量 // 用TryGetValue可以避免Id不存在时抛出异常,返回0作为默认值 int someProduct1 = productCountDict.TryGetValue(1, out var count1) ? count1 : 0; int someProduct2 = productCountDict.TryGetValue(2, out var count2) ? count2 : 0; int someProduct3 = productCountDict.TryGetValue(3, out var count3) ? count3 : 0;
如果能确定这些ProductId一定会出现在列表里,也可以直接用字典索引器取值,写法更简洁:
int someProduct1 = productCountDict[1]; int someProduct2 = productCountDict[2]; int someProduct3 = productCountDict[3];
方式二:直接用LINQ Count(简单直接)
如果只需要统计少数几个固定Id的数量,这种写法更直观,不需要额外创建字典:
int someProduct1 = productList.Count(p => p.ProductId == 1); int someProduct2 = productList.Count(p => p.ProductId == 2); int someProduct3 = productList.Count(p => p.ProductId == 3);
不过要注意:这种方式每调用一次Count都会遍历一次列表,如果你要统计的Id很多,效率会比第一种方式低。
这两种方式都能得到你想要的结果:someProduct1=3、someProduct2=2、someProduct3=1,根据你的实际需求选就行~
内容的提问来源于stack exchange,提问作者Jaracara11
相关产品推荐
相关产品推荐

