0

私は配列を考え出しましたが、今は $CreateGrid[1,1] の値を書き込みホストしたいと思っています。

Write-host "  A   B   C   D   E   F   G   H   I   J " 
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 1"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 2"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 3"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 4"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 5"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 6"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 7"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 8"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "|   |   |   |   |   |   |   |   |   |   | 9"
Write-host "+---+---+---+---+---+---+---+---+---+---+ "
Write-host "| $CreateGrid[1,1] |   |   |   |   |   |   |   |   |   | 10"
Write-host "+---+---+---+---+---+---+---+---+---+---+ " 

ただし、これを試すと、値に対して次の出力が得られます。

(          System.Object[] System.Object[] System.Object[] System.Object[] System.Object[] System.Object[] System.Object[] System.Object[]             Syst
em.Object[] System.Object[]                   System.Object[]                                                 [1,1])

どうすればこれを回避できますか?それとももっと賢い方法がありますか?要するに、上記のグリッドに配列の位置値を含めたいと思います。

編集:

$CreateBoard = New-object "Array[,]" 10,10

Function Add-ToColumn{
param ([Int] $columnnum,[String] $player)

    PROCESS{if (0..9 -notcontains $columnnum){"Invalid move";return}
        #0 is the bottom, 9 is the top
        for($i = 0; $i -le 9; $i++)
        {
            if ($CreateBoard[$columnnum, $i] -eq $null)
            {
                $CreateBoard[$columnnum, $i] = $player
                "Coin placed in $columnnum, $i coins in the column!"
                return
            }
        }
        #if you get here, column is full
        "Invalid move"
    }
}
4

1 に答える 1

0

二重引用符で囲まれた文字列に式を入れると、パーサーは最初の非変数名文字で停止します。そう:

"$CreateGrid[1,1]"

あたかもそうであるかのように処理されます

"$CreateGrid" + "[1,1]"

そのまま$CreateGrid(または少なくともそのように見える) 配列は、ToString各メンバーに対して a を実行し、結果を連結します (これは 2 次元配列であるため、列挙された各メンバーは配列であるため、System.Object[]複数回)。

文字列内で式構文 ( $(...)) を使用すると、含まれている式全体が PowerShell 式として処理されます (たとえば、そこにパイプラインを配置できます)。

"$($CreateGrid[1,1])"
于 2013-01-16T10:40:37.377 に答える