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