Arrays Powershell-声明数组数组不是那么容易吗?
我试图用数组来描述一个小的“列表”。我观察到一种奇怪的行为:Arrays Powershell-声明数组数组不是那么容易吗?,arrays,powershell,declaration,Arrays,Powershell,Declaration,我试图用数组来描述一个小的“列表”。我观察到一种奇怪的行为: function write-it-out([array] $arrays) { foreach($a in $arrays) { write-host "items" $a[0] $a[1] } } $arrayOfArrays1 = @( @("apple","orange"), @("monkey","bea
function write-it-out([array] $arrays)
{
foreach($a in $arrays)
{
write-host "items" $a[0] $a[1]
}
}
$arrayOfArrays1 = @(
@("apple","orange"),
@("monkey","bear")
)
$arrayOfArrays2 = @(
@("android","linux")
)
# it works
write-it-out $arrayOfArrays1
# it wont
write-it-out $arrayOfArrays2
第一种情况输出预期的两行,内容如下:
苹果橙猴子熊 但是第二个函数调用输出的不是预期的 android linux项目 但是 项目a n
项目l i 有人知道为什么吗?如何描述一个数组,其中只包含一个数组,而不是多个数组?那么如何修复它呢?提前谢谢大家 我不太清楚原因,但当您声明
$arrayOfArrays2
时,PowerShell会立即展开外部阵列
> $arrayOfArrays2.Count
2
> $arrayOfArrays2[0]
android
为了避免这种情况,可以在外部数组声明中添加一个额外的逗号,如下所示
> $arrayOfArrays2 = @(,@("android","linux"))
> $arrayOfArrays2.Count
1
> $arrayOfArrays2[0]
android
linux
> write-it-out $arrayOfArrays2
Items android linux
解决方法是有效的,但请注意,
@(@(“android”、“linux”))
中没有外部数组,因为@()
不构造数组,它保证某个东西是数组-如果已经是数组,它就不使用它,粗略地说,请参阅链接副本的公认答案,链接问题的答案很好地解释了问题;至于为什么只打印数组元素的第一个字符:如果索引到字符串中,它将被视为一个字符数组,index[0]
返回第一个字符;e、 g.:'foo'[0]
返回'f'