2010-03-23 66 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的,我添加了线,并增加增量!