我有一个创建数组的程序示例,然后尝试将该数组的值多次分配到另一个数组中作为多维数组。
$a =@(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。
答案 0 :(得分:4)
要将$a
的值指定为$b
而不是$a
的引用,您可以将变量包装在$()
中。在$()
中的任何内容在命令中使用之前都会得到评估,因此$($a)
等同于0, 0, 0
。
$a =@(0,0,0)
$b = @($($a),$($a),$($a))
$b[1][2]=2
$b
'$a is not changed.'
$a
答案 1 :(得分:1)
在PowerShell中要小心','不是枚举器运算符,而是数组运算符。你作为多维数组呈现的东西实际上是一个数组数组,你可以在多维数组的定义下找到它:
$a= new-object ‘object[,]’ 3,3
$a[0,2]=3
PS > for ($i=0;$i -lt 3;$i++)
>> {
>> for($j=0;$j -lt 3;$j++)
>> {
>> $a[$i,$j]=$i+$j
>> }
>> }
这里的所有内容都是$b
,是一个引用数组。