如何在二维数组中返回对象的索引?

时间:2010-10-15 02:28:19

标签: c# boolean nullable multidimensional-array

我正在处理可以为空的布尔值bool?[,]的二维数组。我正在尝试编写一个方法,它将从顶部开始循环遍历其元素1,对于每个为null的索引,它将返回索引。

这是我到目前为止所做的:

public ITicTacToe.Point Turn(bool player, ITicTacToe.T3Board game)
{
    foreach (bool? b in grid)
    {
        if (b.HasValue == false)
        {                      
        }
        if (b.Value == null)
        {
        }


    }
    return new Point();

 }

我希望能够将对象设置为true/false,具体取决于传入的bool。Point只是一个x,y的类。

编写此方法的好方法是什么?

2 个答案:

答案 0 :(得分:2)

您应该使用普通for循环并使用.GetLength(int)方法。

public class Program
{
    public static void Main(string[] args)
    {
        bool?[,] bools = new bool?[,] { { true, null }, { false, true } };

        for (int i = 0; i < bools.GetLength(0); i++)
        {
            for (int j = 0; j < bools.GetLength(1); j++)
            {
                if (bools[i, j] == null)
                    Console.WriteLine("Index of null value: (" + i + ", " + j + ")");
            }
        }
    }
}

.GetLength(int)的参数是维度(即在[x,y,z]中,您应该为维度x的长度传递0,为y传递1,为{{传递2 1}}。)

答案 1 :(得分:1)

只是为了好玩,这是一个使用LINQ和匿名类型的版本。神奇的是SelectMany语句,它将我们的嵌套数组转换为具有X和Y坐标的匿名类型的IEnumerable<>,以及单元格中的值。我使用SelectSelectMany的形式提供索引,以便轻松获取X和Y.

静态

 void Main(string[] args)
 {
     bool?[][] bools = new bool?[][] { 
         new bool?[] { true, null }, 
         new bool?[] { false, true } 
     };
     var nullCoordinates = bools.
         SelectMany((row, y) => 
             row.Select((cellVal, x) => new { X = x, Y = y, Val = cellVal })).
         Where(cell => cell.Val == null);
     foreach(var coord in nullCoordinates)
         Console.WriteLine("Index of null value: ({0}, {1})", coord.X, coord.Y);
     Console.ReadKey(false);
 }