Das Ergebnis könnte in etwa so aussehen:
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());
}
}
So könnte man es lösen, mit 2 Wörterbüchern!
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;
}
Ich speichere also die Zahl in einem Wörterbuch und füge für jedes Vorkommen die Zeile hinzu und erhöhe den Inkrementer!