class Board
{
int[,] ActiveXY = new int[9, 3];
private int NumOfActiveCells()
{
int counter = 0;
for (int i = 0; i < 9; i++)
{
if (ActiveXY[i, 2] == 1) counter++;
}
return counter;
}
...
在此代码中,ActiveXY是一个由9个单元组成的2D数组,每个单元具有3个属性:[0]是X,[1]是Y,[2]如果它是活动的,则为0,表示不活动, 1表示活动。
我正在尝试使用NumOfActiveCells()检查多少个单元处于活动状态,尽管它可以工作,但我仍然希望看看是否有更好的方法甚至是单行方法。也许使用LINQ的东西?
尽管int[,]
仅实现IEnumerable
(非通用版本),但是您可以将Cast<int>
设置为IEnumerable<int>
。然后,您可以使用所有常用的LINQ操作。
所需的所有元素在原始2D数组中的索引均为[x, 2]
(第三列)。由于IEnumerable<int>
代表一维序列,因此2D数组将被展平并且索引[x, 2]
将映射到3x + 2
。因此,要检查1D序列中的元素e
是否在原始2D数组的第三列中,我们只需要查看其在1D序列中的索引是否可以表示为3x + 2
。
int total1s = ActiveXY.Cast<int>().Where((e, index) => e == 1 && (index + 1) % 3 == 0).Count();