2016-09-30 8 views
0

現在渡されている動的セットのサーバー\優先順位に基づいて配列を作成するスクリプトに問題があります。例えば、私はこれを実行すると、私は予想外の出力を得る。しかし、この時点で内部に単一の配列を持つJagged Multidimensionalアレイを作成する

[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 

のようなものを構築したい

server1,200 
server2,200 

下回る入力のオフに基づいて

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 

私は私の望む結果を得る。私の質問は..私はそれの中にただ一つの配列を持つぎざぎざの\多次元配列の私の望む結果を得ることができますか?これは、私が扱っている複数のアイテムが存在する大部分の時間では一般的なシナリオにはなりませんが、すべてのシナリオを説明したいと思います。これはポップアップするものかもしれません。私はちょうどこれを満たすために空の配列をフィルタリングする追加のステップを追加する必要はありません。

すべての入力をいただければ幸いです。

答えて

1

あなたの2つの例では、空の配列([email protected]())を追加しても配列が変更されないため、2つの要素を持つフラットな配列と全く同じ結果が得られます。

デモンストレーション:

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が基本的に配列を連結二つの配列と追記演算子(+=)を使用します。配列をネストされた要素として最初の配列に追加するには、2番目の配列の前に単項配列演算子(,)を追加する必要があります。

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 
]
関連する問題