Есть фиксированное количество чисел(строк). Необходимо внести эти числа в двумерный массив и сосчитать их количество
Есть массив, в котором определённое количество чисел 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 шт):
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);