Есть фиксированное количество чисел(строк). Необходимо внести эти числа в двумерный массив и сосчитать их количество

Есть массив, в котором определённое количество чисел n(задаётся извне, ранее уже известно). Необходимо занести уникальные числа в двумерный массив в один столбец и во втором сосчитать их количество.

Вот пример, один из случаев, массив string[] arr где n=2(2 числа): 5 12 12 12 5 12

И результат:

5 2

12 4

Лично у меня есть 2 варианта: использовать словарь Dictionary<string, int> или же двумерный массив string[,]. Пытаясь сделать задание, я лично придерживался второго варианта, так как он мне показался надёжнее, создав массив:

string[,] numArray = new string[n,2]

Где, очевидно, n - количество чисел и 2 - два столбца для уникальных чисел и их количества. Но по самому решению поставленной задачи(счёту чисел) туплю и не могу ничего придумать. Рассматриваю как дополненные предложенные, так и другие варианты. Заранее спасибо.


Ответы (1 шт):

Автор решения: aepot
Dictionary<int, int> numbers = arr.Select(x => int.Parse(x))
                                  .GroupBy(x => x)
                                  .ToDictionary(x => x.Key, x => x.Count);

Linq решение выше, покажу еще обычное решение.

string[] arr = new string[] { "5", "12", "12", "12", "5", "12" };
Dictionary<int, int> numbers = new Dictionary<int, int>();
for (int i = 0; i < arr.Length; i++)
{
   int number = int.Parse(arr[i]);
   if (numbers.ContainsKey(number))
       numbers[number]++;
   else
       numbers[number] = 1;
}
foreach (var pair in numbers)
    Console.WriteLine($"{pair.Key} {pair.Value}");

Вывод в консоль

5 2
12 4

Если в исходном массиве есть не только числа, но и другой мусор, то тело цикла замените на это.

if (int.TryParse(arr[i], out int number))
{
   if (numbers.ContainsKey(number))
       numbers[number]++;
   else
       numbers[number] = 1;
}

Тогда все что не спарсилось в int, будет пропущено.

В таком случае как посчитать количество ключей?

Чтобы вывести количество ключей массива, надо понимать, что количество ключей равно количеству значений и равно количеству элементов в словаре.

Console.WriteLine(numbers.Count);
→ Ссылка