Powershellmultidimensional array
我有一种方法来做这样的其他langunersarrays:
$x = "David" $arr = @() $arr[$x]["TSHIRTS"]["SIZE"] = "M"
这会产生一个错误。
您正试图创build一个关联数组(哈希)。 尝试下面的一系列命令
$arr=@{} $arr["david"] = @{} $arr["david"]["TSHIRTS"] = @{} $arr["david"]["TSHIRTS"]["SIZE"] ="M" $arr.david.tshirts.size
注意哈希和数组之间的区别
$a = @{} # hash $a = @() # array
数组只能有非负整数作为索引
来自powershell.com:
PowerShell支持两种types的multidimensional array:锯齿形数组和真正的multidimensional array。
锯齿形数组是正常的PowerShell数组,将数组存储为元素。 这是非常具有成本效益的存储,因为尺寸可以是不同的大小:
$array1 = 1,2,(1,2,3),3 $array1[0] $array1[1] $array1[2] $array1[2][0] $array1[2][1]
真正的multidimensional array总是类似于一个矩形matrix。 要创build这样一个数组,您将需要访问.NET。 下一行创build一个包含10个和20个元素的二维数组,类似于一个10x20matrix:
$array2 = New-Object 'object[,]' 10,20 $array2[4,8] = 'Hello' $array2[9,16] = 'Test' $array2
对于三维arrays10 * 20 * 10
$array3 = New-Object 'object[,,]' 10,20,10
为了扩展,manojlds,上面说的是,你可以嵌套的哈希表。 它可能不是一个真正的multidimensional array,但给你一些关于如何构造数据的想法。 一个例子:
$hash = @{} $computers | %{ $hash.Add(($_.Name),(@{ "Status" = ($_.Status) "Date" = ($_.Date) })) }
这很酷的是你可以参考的东西,如:
($hash."Name1").Status
而且,它比用于查找内容的数组要快得多。 我用这个来比较数据,而不是在数组中使用匹配。
$hash.ContainsKey("Name1")
希望有一些帮助!
-亚当
了解PowerShellpipe理cmdlet之间的对象 ,使用一组PSCustomObjects更为常见:
$arr = @( New-Object PSObject -Property @{Name = "David"; Article = "TShirt"; Size = "M"} New-Object PSObject -Property @{Name = "Eduard"; Article = "Trouwsers"; Size = "S"} )
或者对于PowerShell版本3及以上版本:
$arr = @( [PSCustomObject]@{Name = "David"; Article = "TShirt"; Size = "M"} [PSCustomObject]@{Name = "Eduard"; Article = "Trouwsers"; Size = "S"} )
并grep你的select,如:
$arr | Where {$_.Name -eq "David" -and $_.Article -eq "TShirt"} | Select Size