PowerShell中如何声明大小由变量决定的二维(2D)数组?
PowerShell 动态声明变量大小二维(交错)数组方法
你需要的类似C语言arrayName[][]形式的数组,在PowerShell中属于交错数组(即元素为数组的数组)。你原有代码第一行$grid[$args[1]][$args[2]]不是合法的数组声明语句,只是对未初始化变量的取值表达式,直接运行会触发空值错误。
核心实现逻辑
- 命令行传入的
$args参数默认是字符串类型,作为数组长度、索引使用前必须显式转为整数;注意$args索引从0开始计数,脚本接收的第一个传入参数对应$args[0] - 先初始化指定行数的外层数组,再逐行为每一行初始化对应列数的内层数组。禁止用
@(@()) * $rowCount这类乘法写法批量生成内层数组,会导致所有行引用同一个数组对象,修改单行元素时所有行的对应位置都会被篡改。
修正后的可运行测试代码
# 读取传入参数转整数,保留你原代码使用的$args[1]、$args[2]索引 $rowCount = [int]$args[1] $colCount = [int]$args[2] # 初始化外层数组,长度为指定行数 $grid = New-Object object[][] $rowCount $r = 0 $c = 0 $count = 0 # 逐行初始化内层数组并赋值测试 for($r = 0; $r -lt $rowCount; $r++) { $grid[$r] = New-Object object[] $colCount for($c = 0; $c -lt $colCount; $c++) { $grid[$r][$c] = $count $count++ } } # 遍历打印结果 Write-Output "first line: " for($r = 0; $r -lt $rowCount; $r++) { for($c = 0; $c -lt $colCount; $c++) { Write-Output $grid[$r][$c] Write-Output " " } Write-Output "line done`nnext line: " }
可选:矩形二维数组写法
如果你不需要每行长度可以不同的交错数组,只是要固定行列的规则二维数组,可以直接用.NET强类型二维数组(对应C#的[,]形式),初始化更简单:
# 初始化rowCount行、colCount列的整数类型二维数组 $grid = New-Object int[,] $rowCount, $colCount # 赋值时索引用逗号分隔:$grid[$r,$c] = $count
内容的提问来源于stack exchange,提问作者SuperDialga
相关产品推荐
相关产品推荐

