C#数组相邻相同元素压缩计数:现有代码异常,求优化方案
相邻相同元素连续次数统计实现
给定集合:
List<int> Items = new List<int> { 0, 0, 1, 1, 0 };
需求是统计相邻相同元素的连续出现次数,输出格式为「值,计数」,期望输出:
0,2 1,2 0,1
正确实现代码
if (Items == null || Items.Count == 0) return; int currentValue = Items[0]; int count = 1; for (int i = 1; i < Items.Count; i++) { if (Items[i] == currentValue) { count++; } else { Console.WriteLine($"{currentValue},{count}"); currentValue = Items[i]; count = 1; } } // 输出最后一组未处理的元素 Console.WriteLine($"{currentValue},{count}");
代码说明
- 先判断集合是否为空,避免空引用异常
- 初始化
currentValue为集合第一个元素,count初始化为1 - 从第二个元素开始遍历:
- 若当前元素和
currentValue相同,计数累加 - 若不同,输出当前记录的「值,计数」,更新
currentValue为当前元素,重置计数为1
- 若当前元素和
- 遍历结束后必须输出最后一组元素,因为循环仅在遇到不同元素时触发输出,最后一组无后续元素触发,需单独处理
原代码错误推测
你的错误输出缺少开头的0,2和结尾的0,1,大概率是以下问题导致:
- 未从集合第一个元素开始初始化统计,直接从第二个元素开始处理
- 遍历结束后没有输出最后一组元素
- 计数逻辑混乱,导致统计的元素顺序和次数错误
内容的提问来源于stack exchange,提问作者Jonathan Barraone
相关产品推荐
相关产品推荐

