【发布时间】:2021-12-05 07:09:08
【问题描述】:
关于这个话题,到目前为止,我在这里发现了两个与我的问题相关的问题,但并不完全。我找到了如何初始化一个大数组here。另外,我发现了如何声明一个多维数组here。我还没有找到涵盖如何声明和初始化多维数组的解决方案。就我而言,我需要一个数组[10][10],所有元素都初始化为零。目前我这样做如下:
$array = @(
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
)
当然,这是完全不可扩展的。从第一个问题开始,我发现$arr = @(0) * 10000 适用于常规数组,所以我尝试使用$array = @(@(0) * 10) * 10,虽然它运行得很好,但尝试访问该数组的任何元素都会给我一个“无法修改,因为元素为空” ' 错误。
为了澄清,这段代码:
$array = @(
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
@(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
)
Write-Host "$($null -eq $array[1][5])"
返回 False,代码如下:
$array = @(@(0) * 10) * 10
Write-Host "$($null -eq $array[1][5])"
返回 True。
声明和初始化 N 维数组的明确、正确、可扩展的方法是什么?
【问题讨论】:
-
经典 PowerShell 陷阱:使用 comma operator:
$array = ,@(,@(0) * 10) * 10,另请参阅:Why is a leading comma required when creating an array? -
仅供参考:PowerShell Gotchas
-
@iRon 非常有用!我实际上只知道其中的几个,所以阅读其余部分非常好。谢谢!
标签: arrays powershell