Мне нужно подсчитать количество повторений и позицию, где они повторяют все число в многомерном массиве, как это:
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
Как я могу это сделать? Спасибо!
Трюк заключается в том, чтобы определить ваш многомерный таким образом, что становится легко обрабатывать массив.
Это должно работать.
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();
}
Что я получу за домашнее задание?: -)
Результат может выглядеть так:
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;
}
Итак, что я здесь делаю, это то, что я храню номер в словаре и для каждого его вхождения добавляю строку и увеличиваю инкремент!
Number 2- [...] one time in position 2 [...]
, не так ли?