数字在2D数组中出现的次数

问题描述 投票:1回答:1
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的东西?

c# linq multidimensional-array counter
1个回答
0
投票

尽管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();
© www.soinside.com 2019 - 2024. All rights reserved.