2011-10-27 169 views
1

对C#来说相当新颖。为班级分配要求我们从用户输入的值生成数组。这部分完成,工作完美。计数数组中的重复数字

既然数组已完成,我需要能够显示Console.WriteLine中数组中输入的每个不同数字,以及该数字出现了多少次,并且我如何完成此操作有点遗憾。

+1

而不是别人为你做你的功课,做一点研究,当你有一个特定的问题时回来,你可能只是学习一点点。 – ChrisBint

+0

你正在使用哪种.NET框架?有助于确定是否可以使用泛型和/或LINQ或不使用泛型。 – Kash

+0

这是一个解决问题的问题,而不是一个编程问题IMO –

回答

6

你允许使用LINQ吗?如果是这样,调查GroupByCount()。基本上有一个班轮在这里可以工作,但是因为它是作业,所以我会让你为自己制定详细的计划......如果遇到问题,当你有一段时间时寻求更多的帮助。

+2

+1用于指向路径的开始,而不是结束 – Matt

0
foreach (int item in array) 
{ 
    Console.Write(item.ToString() + " "); 
    int frequency = 0; 
    for (int i = 0; i < array.Length; ++i) 
    { 
     if (array[i] == item) ++frequency; 
    } 
    Console.WriteLine(frequency.ToString()); 
} 

肮脏和暴力的方式。考虑你的数组是一个“int”数组。否则,只需更改类型。

+0

请注意,这会打印每个数字的次数,因为{1,1,1}会给出“1 3; 1 3; 1 3”。 –

+0

好点。我会使用字典解决方案来避免这些问题。或者列表而不是数组w/IndexOf()检查以避免重复。 – 2011-10-27 16:29:56

0

没有LINQ,你可以跟踪你生成的数字。像Dictionary这样的数据结构可以很好地工作,将数字映射到迄今为止您看过它的次数。

5

可以创建,所述键是数字和值是在阵列中该特定数的计数,然后将每个一些被发现时间增加在字典中的值的字典:

实施例:

 int[] arrayOfNumbers = new int[] { 1, 4, 2, 7, 2, 6, 4, 4, }; 
     Dictionary<int, int> countOfItems = new Dictionary<int, int>(); 
     foreach (int eachNumber in arrayOfNumbers) 
     { 
      if (countOfItems.ContainsKey(eachNumber)) 
       countOfItems[eachNumber]++; 
      else 
       countOfItems[eachNumber] = 1; 
     } 

这个代码在所有的C#版本,但如果你正在使用C#3或更高,你可以使用LINQ,为他人所提出的建议。 =)