C#数组整数重复次数统计问题:Dictionary计数始终为1
问题分析与修复方案
嘿,你的问题根源一眼就能看出来,就在这行代码里:
dict[arr1[i]] = c++;
为什么所有计数都显示1?
你用了后置自增运算符c++,它的执行逻辑是:先把变量c的当前值(第一次遇到该数字时就是1)赋值给字典对应的键,然后才让c自增1。也就是说,你每次更新字典的时候,其实根本没把累加后的数值存回去,计数自然一直停留在1。
修复方法(两种可选)
方法1:改用前置自增运算符
把c++换成++c,这样会先让c自增,再把更新后的值赋值给字典:
if (dict.ContainsKey(arr1[i])) { int c = dict[arr1[i]]; dict[arr1[i]] = ++c; }
方法2:更简洁的直接累加
其实没必要额外声明变量c,直接对字典里的值进行自增操作就行,代码更清爽:
if (dict.ContainsKey(arr1[i])) { dict[arr1[i]]++; }
额外优化:输出逻辑修正
你当前的输出循环是遍历原数组的每个元素,会重复输出同一个数字的计数(比如数组里有3个1,就会打印3次1:3)。如果想要和示例一样,每个数字只输出一次对应的计数,应该遍历字典的键值对:
foreach (var pair in dict) { Console.WriteLine($"{pair.Key}:{pair.Value}"); }
完整修复后的代码
static void Main(string[] args) { Console.WriteLine("Type 10 numbers"); int[] arr1 = new int[10]; for (int i = 0; i < arr1.Length; i++) { arr1[i] = Convert.ToInt32(Console.ReadLine()); } output(arr1); Console.ReadKey(); } static void output(int[] arr1) { Dictionary<int, int> dict = new Dictionary<int, int>(); for (int i = 0; i < arr1.Length; i++) { if (dict.ContainsKey(arr1[i])) { dict[arr1[i]]++; } else { dict.Add(arr1[i], 1); } } foreach (var pair in dict) { Console.WriteLine($"{pair.Key}:{pair.Value}"); } }
内容的提问来源于stack exchange,提问作者Archie Payne
相关产品推荐
相关产品推荐

