我正在处理可以为空的布尔值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
的类。
编写此方法的好方法是什么?
答案 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<>
,以及单元格中的值。我使用Select
和SelectMany
的形式提供索引,以便轻松获取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);
}