私は配列を作成し、その配列の値を別の配列に多次元配列として複数回割り当てようとするプログラムの例を持っています。Powershell配列の代入は値ではなく変数を代入しますか?
$a [email protected](0,0,0)
$b = @($a,$a,$a)
$b[1][2]=2
$b
'And $a is changed too:'
$a
出力である:
PS E:\Workarea> .\what.ps1
0
0
2
0
0
2
0
0
2
And $a is changed too:
0
0
2
したがって、この例では、変数は、実際には、元の変数を指しています。これは非常に予期しない動作です。私のCプログラミングではそれほど労組を使用したことはありませんでしたが、これはむしろきちんとしています。しかし、私は実際に変数の値ではなく、値の割り当てを行う方法が欲しいです。
$b = @($a.clone(),$a.clone(),$a.clone())
私はうまくいくと思いますが、何かがそれよりもう少しエレガントな何かがあるかもしれないことを私に伝えます。
ありがとうございます。
これはWindows 7 64ビット版のPowerShell 2.0です。
ありがとうございます。それは動作します。 なぜ私は$ a = $ bのインスタンスがあなたに値を与え、別のインスタンスがあなたに参照を与えるのか理解できません。特に$ bが何かになる可能性があるという保証はありません。 – bytehead
これはPowerShellに固有の問題ではありません。これは.NETがClasses(参照による)とStructs(値による)のメモリ割り当てを処理する方法です。数値(int、doubleなど)も値です。 http://www.albahari.com/valuevsreftypes.aspxには良い説明があります。 Microsoftからhttp://msdn.microsoft.com/en-us/library/t63sy5hs(v=VS.100).aspx – Rynant
ありがとうございます。杭についてもっと読む。 – bytehead