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