【问题标题】:Output how many duplicates in an array c# - Beginner输出数组中有多少重复项 c# - 初学者
【发布时间】:2018-05-31 17:40:05
【问题描述】:

我是 c# 的初学者,只是想对我的程序寻求一点帮助,我希望输出数组中每个 int 的重复数,例如数组 1,2,3,4,1,1,3 将输出 1:3、2:1、3:2、4:1。目前,无论每个数字有多少,字典都只计算一个并将每个值输出为 1。

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]))
            {

                int c = dict[arr1[i]];
                dict[arr1[i]] = c++;

            }
            else
            {
                dict.Add(arr1[i], 1);
            }
        }
        for (int i =0; i<arr1.Length; i++)
        {
            Console.WriteLine(arr1[i] + ":" + dict[arr1[i]]);
        }
    }

【问题讨论】:

  • 有什么问题?

标签: c# arrays dictionary duplicates


【解决方案1】:

我假设您想编写算法来自己对数字进行分组。如果没有,请查看 LINQ,它已经提供了很多收集操作,这让生活变得更加轻松。在您的情况下,GroupBy 应该已经可以解决问题了。

您的实现问题在于以下行:

dict[arr1[i]] = c++;

原因是您在将其设置为新的字典值后递增int cc++++c 是不同的操作,这在 What is the difference between ++i and i++? 中有描述。在设置值使用之前解决您的问题和增量

dict[arr1[i]] = ++c;

请注意,您也可以将这个增量步骤写得更紧凑,例如

dict[arr1[i]]++;

【讨论】:

    【解决方案2】:

    如果你想使用 Linq

    var array = new int[] { 1, 2, 3, 4, 1, 1, 3 };
    var str= string.Join(",", array.GroupBy(x => x).Select(g => g.Key + ":" + g.Count()));
    Console.WriteLine(str);
    

    【讨论】:

      【解决方案3】:

      虽然 Fruchtzwerg 是正确的,但您在 c 递增之前返回它,您甚至不应该创建临时变量。

      只要做:

      dict[arr1[i]] += 1; //or dict[arr1[i]]++;
      

      您也不应该使用该 for 循环来遍历字典值。因为它不会按照您可能想要的方式打印出来。

      foreach(var kvp in dict)
      {
          Console.WriteLine(kvp.Key + ":" + kvp.Value);
      }
      

      尝试使用上面的 foreach 循环

      【讨论】:

        猜你喜欢
        • 2013-07-22
        • 2013-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-04
        • 2019-10-21
        • 1970-01-01
        • 2011-03-15
        相关资源
        最近更新 更多