如何创建数组/列表实现关联数组元素计数?现有代码存疑求方案
关联数组元素计数的正确实现策略
嘿,我来帮你理清楚这个问题!你的核心需求是统计数组中每个元素的出现次数,但你的伪代码里混淆了itemsList类和集合的用法——毕竟itemsList是单个条目类,没法直接用来做包含检查或索引访问。下面给你两种靠谱的实现策略,结合你的代码场景来:
策略一:基于你定义的itemsList类实现
既然你已经定义了itemsList类,我们可以用**字典(Dictionary)**来管理这些统计项,字典的键用itemName,这样能快速查找对应条目,效率很高:
步骤说明
- 先初始化一个
Dictionary<string, itemsList>集合,用来存储每个item的统计信息 - 遍历目标数组
items,对每个元素做如下判断:- 如果字典中已经存在以当前元素为键的条目,直接把对应
itemsList的itemCount加1 - 如果不存在,就创建一个新的
itemsList实例,设置itemName为当前元素、itemCount为1,再添加到字典中
- 如果字典中已经存在以当前元素为键的条目,直接把对应
- 最后如果需要把统计结果转为
itemsList数组,直接取字典的Values即可
C#代码示例
// 假设你的items是string类型数组(根据你的伪代码推断) string[] items = { "apple", "banana", "apple", "orange", "banana", "apple" }; // 初始化统计集合 Dictionary<string, itemsList> countDict = new Dictionary<string, itemsList>(); foreach (string currentItem in items) { if (countDict.ContainsKey(currentItem)) { // 已存在,计数加1 countDict[currentItem].itemCount++; } else { // 不存在,新增条目 countDict.Add(currentItem, new itemsList { itemName = currentItem, itemCount = 1 }); } } // 可选:把统计结果转为itemsList数组 itemsList[] resultArray = countDict.Values.ToArray();
策略二:简化实现(无需itemsList类)
如果你的需求只是统计次数,不需要额外存储itemName(毕竟字典的键就是itemName),可以直接用Dictionary<string, int>来实现,代码更简洁:
C#代码示例
string[] items = { "apple", "banana", "apple", "orange", "banana", "apple" }; Dictionary<string, int> countDict = new Dictionary<string, int>(); foreach (string currentItem in items) { if (countDict.ContainsKey(currentItem)) { countDict[currentItem]++; } else { countDict.Add(currentItem, 1); } } // 如果需要转成你的itemsList数组,也可以快速转换 itemsList[] resultArray = countDict.Select(kv => new itemsList { itemName = kv.Key, itemCount = kv.Value }).ToArray();
为什么你的原伪代码无法运行?
你原伪代码里直接调用itemsList.Contain("itemName", item)和itemsList[item]是错误的:
itemsList是一个类的定义,不是实例化的集合,没法直接调用集合类的方法- 即使是实例化的单个
itemsList对象,它也没有Contain或索引访问的能力,因为它只是存储单个条目的类
内容的提问来源于stack exchange,提问作者Agent Smith
相关产品推荐
相关产品推荐

