2012-08-07 58 views
5

我是C#的新手,希望能夠在此主題上獲得一些幫助。我有一個包含元素的數組,我需要顯示每個項目出現的次數。如何顯示數組元素出現的次數

例如,在[1, 2, 3, 4, 4, 4, 3],1出現一次,4出現三次,以此類推。

我做了以下但不`噸知道如何把它在foreach/if語句...

int[] List = new int[]{1,2,3,4,5,4,4,3}; 
foreach(int d in List) 
{ 
    if("here I want to check for the elements") 
} 

謝謝你,對不起,如果這是一個非常基本的一個...

+0

如果這是家庭作業,請將其標記爲此類。 – FishBasketGordo 2012-08-07 17:19:22

+0

nope它不是,我只是在學習,並試圖這樣做:-) – Momo 2012-08-07 17:20:19

+1

嘗試使用「字典」,其中每個鍵代表一個唯一的條目,並且該值表示一個計數。每次點擊一個現有的鍵時,將其值增加1. – 2012-08-07 17:21:24

回答

11

您可以通過Enumerable.GroupBy來處理。我建議查看Count和GroupBy上的C# LINQ samples部分以獲取指導。

在你的情況,這可能是:

int[] values = new []{1,2,3,4,5,4,4,3}; 

var groups = values.GroupBy(v => v); 
foreach(var group in groups) 
    Console.WriteLine("Value {0} has {1} items", group.Key, group.Count()); 
7

你可以保持項目的Dictionary發現以及它們相關的計數。在下面的示例中,dict[d]通過其值指向一個元素。例如d = 4

int[] List = new int[]{1,2,3,4,5,4,4,3}; 
var dict = new Dictionary<int, int>(); 
foreach(int d in List) 
{ 
    if (dict.ContainsKey(d)) 
     dict[d]++; 
    else 
     dict.Add(d, 1); 
} 

foreach循環終止你必須在每dict獨特價值的一個條目。您可以通過訪問dict[d]來獲取每個項目的計數,其中d是您原始列表中的某個整數值。

1
var list = new int[] { 1, 2, 3, 4, 5, 4, 4, 3 }; 
var groups = list.GroupBy(i => i).Select(i => new { Number = i.Key, Count = i.Count() }); 
3

的LINQ答案是好的,但如果你想自己做:

int[] numberFound = new int[6]; 
int[] List = new int[] { 1, 2, 3, 4, 5, 4, 4, 3 }; 
foreach (int d in List) 
{ 
    numberFound[d]++; 
} 
+0

爲什麼你爲numberFound分配6個空格,但只有5個空間? – JonH 2012-08-08 04:16:40

+0

@JonH因此numberFound [x]將對應於x,而不是x-1。 (numberFound的範圍從** 0 **到5.) – ispiro 2012-08-08 15:53:09

+0

啊,是的,你是對的我沒有仔細看清單。 – JonH 2012-08-08 17:52:29

-1
public static void ArrayNumbersCount() 
    { 
     int number=0; 
     int count=1; 
     Dictionary<int, int> collection = new Dictionary<int, int>(); 
     int[] intergernumberArrays = { 1, 2, 3, 4, 1, 2, 4, 1, 2, 3, 5, 6, 1, 2, 1, 1, 2 }; 
     for (int i = 0; i < intergernumberArrays.Length; i++) 
     { 
      number = int.Parse(intergernumberArrays[i].ToString()); 
      if (!collection.ContainsKey(number)) 
      { 
       for (int j = i + 1; j < intergernumberArrays.Length; j++) 
       { 
        if (int.Parse(intergernumberArrays[i].ToString()) == int.Parse(intergernumberArrays[j].ToString())) 
        { 
         count++; 
        } 
       } 
       collection.Add(number, count); 
      } 
      count = 1; 
      number = 0; 
     } 
     foreach (var kvp in collection.ToList()) 
     { 
      Console.WriteLine("{0} {1}", kvp.Key, kvp.Value);     
     }    
    } 
+1

這與4.5年前[@Yuck's answer](http://stackoverflow.com/a/11850986/150605)中的概念相同,不同之處在於解決方案只訪問每個數組元素一次,而這個迭代遍歷剩下的數組每遇到一個新值。此外,檢索類型爲「int」的數組元素的目的是什麼,將其格式化爲「string」,然後將其解析爲「int」?爲什麼不使用'intergernumberArrays [i]'而不是'int.Parse(intergernumberArrays [i] .ToString())'? – BACON 2017-05-02 05:25:18