PowerShell中合并两数组为数组的数组时结果异常,如何解决?
PowerShell合并数组为数组的数组出错的原因与解决方法
你的问题核心是PowerShell默认会展开输出的集合元素。当你在foreach循环里返回($list1Item, $list2Item)时,这个二元数组会被拆成两个独立元素进入结果集合,最终$result变成了扁平的一维数组:'A','1','A','2','B','1','B','2',而非你期望的“数组的数组”结构,所以遍历的时候每个$resultItem都是单个字符串,$resultItem[1]自然为空,导致输出异常。
解决方法
有两种简单的方式可以强制保留数组作为单个元素:
方法一:用逗号前缀包装数组
在返回的数组前加一个逗号,将其包装成单元素数组,PowerShell就不会展开内部的二元数组:
$list1 = 'A','B'; $list2 = '1','2'; $result = foreach ($list1Item in $list1) { foreach ($list2Item in $list2) { # 逗号前缀强制将二元数组作为单个元素输出 ,($list1Item, $list2Item) } } foreach ($resultItem in $result) { Write-Host "$($resultItem[0])-$($resultItem[1])" }
方法二:预先初始化结果数组并添加元素
先创建一个空数组,每次循环把包装后的二元数组添加进去:
$list1 = 'A','B'; $list2 = '1','2'; $result = @() # 初始化空数组 foreach ($list1Item in $list1) { foreach ($list2Item in $list2) { # 用逗号包装后添加到结果数组 $result += ,($list1Item, $list2Item) } } foreach ($resultItem in $result) { Write-Host "$($resultItem[0])-$($resultItem[1])" }
预期输出
运行修改后的脚本,就能得到你想要的结果:
A-1 A-2 B-1 B-2
内容的提问来源于stack exchange,提问作者Martin Brown
相关产品推荐
相关产品推荐

