如何获取二维数组中数字1的所有索引?

How can I get all the indexes of the number 1 in a two-dimensional array?

我有一个如下所示的数组:

int[,] figureL = {{0, 1, 0},
                  {0, 1, 0},
                  {0, 1, 1}};

如何获取所有等于1的数字的索引?所以不仅仅是一个数字,而是所有数字 1's.

为此,您只想遍历数组的两个维度并查看当前索引处的值是否等于 1。

对于您在此处定义的二维数组,您需要找到 Rank(它显示数组中有多少维)。您还需要通过调用 figureL.GetUpperBound(rank) 找到每个维度的上限,其中 rank 是当前维度。然后您可以使用该信息来构建循环,循环遍历您的数据结构。

下面是使用上述语法的二维数组枚举示例:

        private void Test()
        {
            int[,] figureL= {
                {0,1,0 },
                {0,1,0 },
                {0,1,1 }
            };

            Parse(figureL);
        }

        private void Parse(int[,] input)
        {
            var dimension1 = input.GetUpperBound(0);
            var dimension2 = input.GetUpperBound(1);

            for (int i = 0; i <= dimension1; i++)
            {
                for (int j = 0; j <= dimension2; j++)
                {
                    if (input[i, j] == 1)
                        Console.WriteLine($"[{i},{j}]");
                }
            }
        }

当然,如果您要处理二维以上的数组,则必须更改此设置,但就目前而言,它应该足以让您开始使用多维数组。

这样的事情怎么样:

int[,] matrix =
    {{0, 1, 0},
     {0, 1, 0},
     {0, 1, 1}};

for (var i = 0; i < matrix.GetLength(0); i++)
{
    for (var j = 0; j < matrix.GetLength(1); j++)
    {
        if (matrix[i, j] == 1)
        {
            Debug.WriteLine($"index [{i}, {j}] is 1");
        }
    }
}

matrix.GetLength(int) 调用为您提供两个维度的大小(zero-eth 和第一个)。

输出如下:

index [0, 1] is 1
index [1, 1] is 1
index [2, 1] is 1
index [2, 2] is 1

您可以编写一个 LINQ-like 扩展方法来帮助您在数组中查找任意元素:

public static IEnumerable<(int,int)> FindIndices<T>(this T[,] source, Func<T,bool> predicate)
    {
        for (int i = 0; i < source.GetLength(0); i++)
        {
            for (int j = 0; j < source.GetLength(1); j++)
            {
                if(predicate.Invoke(source[i,j]))
                {
                     yield return (i,j);
                }
            }
        }
    }

它将 returns 个满足 predicate 条件的元素索引的元组。用法是

var indices = figureL.FindIndices(x => x == 1);

Online-demo: https://dotnetfiddle.net/tdcwa4