2010-03-23 60 views
2

重複的次數,我需要算重複和位置的數量,他們在多維數組重複所有號碼這樣的:在多維數組

1 2 1 
1 1 2 
2 3 1 

,並導致需要是:

Number 1- two times on position 1, one time on position 2, two times on position 3 
Number 2- one time on position 1, two times on position 2, one times on position 3 
Number 3- 0 on position 1, one time on position 2, 0 on position 3 

我怎麼能做到這一點?謝謝!

+6

作業?你到目前爲止提出了什麼? – 2010-03-23 11:09:06

+0

'位置2的數字2-一次'',不是嗎? – Gorpik 2010-03-23 11:32:18

回答

2

訣竅是以這樣的方式定義你的多維數組,使得它變得易於處理數組。

這應該工作。

int[][] jaggedArray = 
{ 
    new[] { 1, 1, 2 }, 
    new[] { 2, 1, 3 }, 
    new[] { 1, 2, 1 } 
}; 

foreach (var number in Enumerable.Range(1, 3)) 
{ 
    Console.Write("Number " + number + "- "); 
    for (int index = 0; index < jaggedArray.Length; index++) 
    { 
     int[] innerArray = jaggedArray[index]; 

     var count = innerArray.Count(n => n == number); 

     Console.Write(count + " times on position " + (index + 1) + ", "); 
    } 

    Console.WriteLine(); 
} 

我做什麼作業? :-)

+0

當你使用lambda時,它是作弊的! ;)雖然不錯。 – 2010-03-23 11:40:27

+0

只使用可用的工具:-) – Steven 2010-03-23 11:56:01

+0

這是一個笑話:) – 2010-03-23 12:23:33

1

結果可能要被lookcing是這樣的:

var listOfLists = new int[,] { 
     {1,2,1}, 
     {1,1,2}, 
     {2,3,1} 
}; 

var dict = CountEachNumber(listOfLists, 3, 3); 

foreach (var number in dict) 
{ 
    Console.WriteLine(string.Format("Number {0} - ", number.Key.ToString())); 
    foreach (var occurence in number.Value) 
    { 
     Console.WriteLine("{0} times at position {1},", 
      occurence.Value.ToString(), 
      (occurence.Key+1).ToString()); 
    } 
} 

這是你如何可以解決這個問題,有2本字典!

static Dictionary<int, Dictionary<int, int>> 
          CountEachNumber(int[,] list, int height, int width) 
    { 
     // Containging 
     //  Number 
     //  Information 
     //   Line 
     //   Occurences 
     var dict = new Dictionary<int, Dictionary<int,int>>(); 

     for (int i = 0; i < height; i++) 
     { 
      for (int a = 0; a < width; a++) 
      { 
       var number = list[i, a]; 
       if (dict.ContainsKey(number)) 
       { 

        if (dict[number].ContainsKey(a)) 
        { 
         dict[number][a]++; 
        } 
        else 
        { 
         dict[number].Add(a, 1); 
        } 
       } 
       else 
       { 
        var val = new Dictionary<int, int>(); 
        val.Add(a, 1); 
        dict.Add(number, val); 
       } 
      } 
     } 

     return dict; 

    } 

所以我在做什麼這裏是我存放數的字典,它的每個OCCURENCES的,我添加了線,並增加增量!