2012-08-28 21 views
1
int[] array = new int[10]; 
array[0] = 1; 
array[1] = 1; 
array[2] = 1; 
array[3] = 2; 
array[4] = 1; 
array[5] = 2; 
array[6] = 1; 
array[7] = 1; 
array[8] = 2; 
array[9] = 3; 

我想要得到這樣的結果:使用count查找數組值?

1 => 6 times 
2 => 3 times 
3 => 1 times 

有沒有什麼簡單的方法來得到這樣的結果,而不if-else statement

謝謝。

+0

我不知道,你會使用'如果-else'語句來得到結果了! :-) –

+0

遞歸。最簡單的方法。 – wesside

+0

你的意思是遞歸? – wesside

回答

7

是,通過LINQ的GroupBy()

var res = array.GroupBy(x => x) 
       .Select(x => new {Number=x.Key,Times=x.Count()}) 
       .ToList(); 

注意:如果你想遍歷結果只是一次
ToList()可能沒有必要。

+0

謝謝。有很多答案。首先是你。我會接受這一點。謝謝大家。 –

+0

我希望upvoted爲我的問題:)所有他們都upvoted,但我沒有:) –

+0

@AliRızaAdıyahşi:原因是有很多重複上SO。沒有'GroupBy' ;-)沒有一天 –

2

您可以使用LINQ和組數據:

var result = array.GroupBy(x => x) 
        .Select(x => new { Value = x.Key, Count = x.Count() }); 
2
array.GroupBy(a => a).Select(a => new { Value = a.Key, Count = a.Count() }); 
1

您可以使用LINQ來計算出結果。如果你把下面的控制檯應用程序它應該工作:

using System; 
using System.Linq; 

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] array = new int[10]; 
      array[0] = 1; 
      array[1] = 1; 
      array[2] = 1; 
      array[3] = 2; 
      array[4] = 1; 
      array[5] = 2; 
      array[6] = 1; 
      array[7] = 1; 
      array[8] = 2; 
      array[9] = 3; 

      var group = from i in array 
         group i by i into g 
         select new 
         { 
          g.Key, 
          Sum = g.Count() 
         }; 

      foreach (var g in group) 
      { 
       Console.WriteLine(g.Key + " " + g.Sum); 
      } 
     } 
    } 
} 
+1

ITYM'g.Count()'如在其他答案:) – hvd

1

這是一個LINQ聲明,將允許你建立你的輸出:

array.GroupBy(x => x).Select(x => new { x.Key, Count = x.Count() }); 
1

Enumerable.GroupBy組由選擇的序列。然後你可以使用這些組來計算它們或做你需要的任何事情。

var countGroups = array.GroupBy(a => a) 
         .OrderByDescending(g => g.Count()); 

foreach(var g in countGroups) 
    Console.WriteLine("{0} => {1} times", g.Key, g.Count()); 

下面是與樣品演示:http://ideone.com/WatNL