我有一个程序创建一个数组,然后试图将该数组的值多次分配到另一个数组作为多维数组的示例。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 2012-01-09 21:02:13
这不是特定于PowerShell的;它是如何处理类(通过引用)与结构(按值)的内存分配。数值(int,double等)也是按值计算的。在http://www.albahari.com/valuevsreftypes.aspx有一个很好的解释。并从微软http://msdn.microsoft.com/en-us/library/t63sy5hs(v=VS.100).aspx – Rynant 2012-01-09 21:50:15
谢谢。在堆上更多的阅读。 – bytehead 2012-01-10 03:39:02