You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:48