2010-10-15 109 views
1

我正在處理可空布爾值的2-D數組bool?[,]。我正在嘗試編寫一個方法,它將從頂部開始一次循環其元素1,並且對於每個爲null的索引,它將返回索引。如何返回2維數組中的對象的索引?

這是我到目前爲止有:。

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根據傳入的布爾Point僅僅是一個與x,y類。

什麼是寫這種方法的好方法?

+0

這有很大幫助,謝謝。我對C#還是比較陌生,這段代碼的目的是什麼?大多數人對{true,null}和{false,true}部分感到困惑。 bool?[,] bools = new bool?[,] {{true,null},{false,true}}; – Cody 2010-10-15 05:02:05

回答

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,1的長傳球0 y,和2 z

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); 
} 
+1

+1,我總是喜歡LINQ的答案。 – 2010-10-15 04:45:52