Строки и столбцы матрицы
В PascalABC.NET двумерные массивы трактуются как матрицы и содержат ряд мощных методов. Важнейшими методами являются a.Row(i) и a.Col(j) - i-тая строка и j-тый столбец матрицы a, представленные как одномерные массивы.
Рассмотрим ряд задач, которые легко решаются этими методами
Заполним вначале матрицу 6 на 9 оценками от 2 до 5:
## var a := MatrRandomInteger(6,9,2,5); a.Println(3);
2 5 2 5 3 4 4 2 2 5 2 2 4 4 3 4 3 4 2 2 4 3 4 5 5 4 2 2 4 4 2 3 2 5 3 3 4 3 5 4 5 5 4 4 3 3 4 3 5 2 3 4 5 3
Выведем количество двоек и троек в нулевой строке:
a.Row(0).Count(x -> x in |2,3|).Println;
Сделаем то же двумерным срезом:
a[0,:].Count(x -> x in |2,3|).Println;
Теперь выполним массовый запрос: вычислим количество двоек и троек в каждой строке. Для этого сформируем одномерный массив, в котором столько элементов, сколько строк в матрице - a.RowCount - и каждый i-тый элемент равен количеству двоек и троек в i-той строке:
ArrGen(a.RowCount, i -> a.Row(i).Count(x -> x in |2,3|)).Println;
5 4 4 6 2 5
Для закрепления посчитаем суммы в каждом столбце:
ArrGen(a.ColCount, i -> a.Col(i).Sum).Println;
18 20 20 23 21 22 26 21 17
Вывод. Стандартная библиотека PascalABC.NET содержит мощные методы работы со строками и столбцами матрицы Rows и Cols, которые позволяют вычислять характеристики строк и столбцов, такие как суммы, максимумы, минимумы, количества, очень просто. Если нам необходимо посчитать такую характеристику для всех строк или столбцов, то формируем одномерный массив функцией ArrGen и в качестве второго параметра передаём лямбду, проектирующую индекс массива на нужную характеристику, например: j -> a.Col(j).Max.