Хотя int[,]
реализует только IEnumerable
(версия non-generi c), вы можете Cast<int>
сделать его IEnumerable<int>
. Затем вы можете использовать все обычные операции LINQ.
Все элементы, которые вы хотите, имеют индекс [x, 2]
(третий столбец) в исходном двумерном массиве. Поскольку IEnumerable<int>
представляет одномерную последовательность, двумерный массив будет сглажен, а индекс [x, 2]
будет отображен на 3x + 2
. Таким образом, чтобы проверить, находится ли элемент e
в последовательности 1D в третьем столбце исходного двумерного массива, нам просто нужно посмотреть, можно ли выразить его индекс в последовательности 1D как 3x + 2
.
int total1s = ActiveXY.Cast<int>().Where((e, index) => e == 1 && (index + 1) % 3 == 0).Count();
Редактировать: Я только что подумал о более удобочитаемом решении:
int total1s = Enumerable.Range(0, 9).Select(i => ActiveXY[i, 2]).Count(x => x == 1);
Это работает так же, как вы для l oop, с "l oop counter" i
, идущим от 0 до 8 и считая элементы, которые соответствуют x == 1
.