( BaT | 2015. 03. 05., cs – 00:05 )

Ahogy ígértem, a konkrét válasz. Utólagos engedelmeddel kicsit alakítottam a scripteken, beleértve a formázást és a felesleges kódrészletek törlését. A 2D-s eset így néz ki az én verziómban:


[System.Collections.ArrayList] $script:tdb = @()

$asd = "nulla","egy","ketto","harom","negy","ot","hat","het","nyolc","kilenc","tiz"

for($x = 0; $x -lt 10; $x++) {
    $script:tdb += ,("$x",$asd[$x])

    Write-Host $script:tdb[$x][0],";",$script:tdb[$x][1]
}

A

$script:tdb[$x]+=,@($x",$asd[$x])

sor, ha önmagában áll a ciklusban, akkor azért nem működik, mert a tömb x. eleméhez akarsz új elemet hozzáadni, ami nem létezik. Ha előtte áll egy

$script:tdb += ,@()

sor is, akkor pedig azért nem lesz jó, mert 3 dimenziós tömböt fogsz kapni, aminek a második dimenziója mindig egy elemű.

A második esetben nem egészen értettem meg, mit is szeretnél kapni eredményül, ezért csak annyit tudok mondani, hogy a

$script:tdb[$y][$x]+=,@()

sor biztosan hibás, mert azon a ponton a második dimenziód még üres. Javaslom, hogy ehelyett akkor bővítsd a tömböt, amikor y olyan indexre mutat, ami még nem létezik, valahogy így:


if($y -ge $script:tdb.Count) {
    $script:tdb += ,@()
}

Felmerült bennem, hogy a te use case-edre nem tömbök tömbjét kellene használnod, hanem hashtable tömböt. Powershellben hashtable-t így lehet használni:


$h = @{Name1 = "Value1"; Name2 = "Value2"}
$h.Name1 # Value1

$h.Name2 = 123
$h.Name2 # 123

$h.Name3 = "Value3"
$h.Name3 # Value3