2016-08-17 10 views
0

に更新されたとき、私はそれが追加された後、アレイ内のハッシュテーブル値更新を行いなぜ次の出力にArrayオブジェクトのコピーの更新オブジェクトは

[ 
    { 
     "properties": { 
          "addressPrefix": "10.1.0.0/24" 
         }, 
     "name": "subnet-1" 
    }, 
    { 
     "properties": { 
          "addressPrefix": "10.1.0.0/24" 
         }, 
     "name": "subnet-1" 
    } 
] 

を与えるコード

$subnet = @{ 
    name = 'subnet-1' 
    properties = @{ 
     addressPrefix = '10.0.0.0/24' 
    } 
} 

$array = @() 

$array += $subnet 

$subnet.properties.addressPrefix = '10.1.0.0/24' 

$array += $subnet 

$array | ConvertTo-Json 

のこのビットを持っています?私は+=が配列のコピーを作成したと思った。

これを防ぐにはどうすればよいですか? (つまり、私が探している結果を得る!)

答えて

2

をハッシュテーブルをコピーする場合、PowerShellは参照を使用していますので、あなたはコピーを作成するためにそれを強制するためにそれらをCloneする必要があります。

$array += $subnet 

$subnet2 = $subnet.Clone() 
$subnet2.properties = $subnet.properties.Clone() 
$subnet2.properties.addressPrefix = '10.1.0.0/24' 

$array += $subnet2 

すると結果は次のとおりです。

[ 
    { 
     "properties": { 
          "addressPrefix": "10.0.0.0/24" 
         }, 
     "name": "subnet-1" 
    }, 
    { 
     "properties": { 
          "addressPrefix": "10.1.0.0/24" 
         }, 
     "name": "subnet-1" 
    } 
] 
関連する問題