2016-09-30 14 views
0

我目前具有帶建立了基於斷一組動態服務器傳遞給它\優先級的陣列的腳本的問題與單個陣列中的鐵血\多維數組。例如,基於關閉輸入下面內創建它

server1,200 
server2,200 

我想建立的東西,看起來像

[email protected]() #at this point I have an empty array 
[email protected]("server1",200) #at this point, I would expect to have an array 
         #that itself holds another array 

但是在這一點上,當我運行此我得到意想不到的輸出

echo $arr.count # result is 2, rather than the 1 I would expect 
       # It appears to be treating $arr as a single array 
       # with two members (server1 and 200) rather than an array 
       # that holds an array, which itself has two members 

但是,如果我添加另一個空陣列到我的陣列:

$arr = @() 
$arr += @() 
$arr += $("server1",200) 
$arr.count # output is 2, which is the desired result 

我得到了我想要的結果。我的問題是..我可以得到我想要的結果鋸齒\ multidimensional陣列只有一個單一的數組裏面呢?這不會是一個常見的情況,因爲大多數時候我會處理多組項目,但是我想說明所有情況,這可能會彈出一個。我只想不必爲了滿足這一點而添加一個額外的步驟來過濾出一個空數組。

任何輸入將不勝感激。

回答

1

你的實施例2產生完全相同的結果,平面陣列2層的元件,因爲附加空數組([email protected]())不以任何方式修改陣列。

示範:

PS C:\>$arr = @() 
PS C:\>$arr += @('server1', 200) 
PS C:\>$arr.Count 
2 
PS C:\>Format-Custom -InputObject $arr 
server1 
200
PS C:\>$arr = @() 
PS C:\>$arr += @() 
PS C:\>$arr += @('server1', 200) 
PS C:\>$arr.Count 
2 
PS C:\>Format-Custom -InputObject $arr 
server1 
200

當您使用追加操作符(+=)有兩個數組的PowerShell基本上串接的陣列。要將數組作爲嵌套元素附加到第一個數組,您需要在第一個數組中添加一元數組構造運算符(,)。

PS C:\>$arr = @() 
PS C:\>$arr += ,@('server1', 200) 
PS C:\>$arr += ,@('server2', 200) 
PS C:\>$arr.Count 
2 
PS C:\>Format-Custom -InputObject $arr 

[ 
    server1 
    200 
] 

[ 
    server2 
    200 
]

如果您事先知道元素的數量,您還可以預先創建一個所需大小的數組,並將嵌套數組指定爲其元素。這不需要逗號運算符。

PS C:\>$arr = New-Object Object[] 2 
PS C:\>$arr.Count 
2 
PS C:\>$arr[0] = @('server1', 200) 
PS C:\>$arr[1] = @('server2', 200) 
PS C:\>Format-Custom -InputObject $arr 

[ 
    server1 
    200 
] 

[ 
    server2 
    200 
]