PowerShell中能否使用foreach实现数组元素的索引配对输出?
如何用PowerShell的foreach实现数组对应元素配对输出?
我尝试在PowerShell中使用嵌套foreach执行如下脚本:
$var1 = @("aaa","bbb","ccc"..........) $var2 = @("111","222","333"..........) foreach ($val1 in $var1) { echo $val1 foreach ($val2 in $var2) { echo $val2 } }该脚本的输出为:
aaa 111 222 333 bbb 111 222 333........但我期望的输出格式是:
aaa 111 bbb 222 ccc 333........请问是否可以通过foreach实现这种输出?我已经使用for循环解决了此问题。
当然可以用foreach实现这种对应元素配对输出的需求!你的嵌套foreach之所以会得到笛卡尔积(每个$var1元素都搭配所有$var2元素),是因为你把两个数组的遍历完全独立开了。要实现对应索引的配对,我们可以借助索引来关联两个数组的元素,同时用foreach来完成遍历,这里给你几种可行的方案:
方案1:遍历索引的foreach循环
我们先生成数组的索引范围,然后通过foreach遍历每个索引,以此获取两个数组中对应位置的元素:
$var1 = @("aaa","bbb","ccc") $var2 = @("111","222","333") foreach ($index in 0..($var1.Count - 1)) { Write-Host "$($var1[$index]) $($var2[$index])" }
方案2:遍历第一个数组时维护索引
在遍历$var1的foreach循环中,手动维护一个索引变量,每次循环后递增,以此匹配$var2的对应元素:
$var1 = @("aaa","bbb","ccc") $var2 = @("111","222","333") $currentIndex = 0 foreach ($val1 in $var1) { Write-Host "$val1 $($var2[$currentIndex])" $currentIndex++ }
方案3:PowerShell 7+ 用Zip方法简化(foreach变体)
如果你使用的是PowerShell 7及以上版本,可以利用数组的Zip方法直接配对两个数组的元素,再通过foreach遍历配对结果:
$var1 = @("aaa","bbb","ccc") $var2 = @("111","222","333") foreach ($pair in $var1.Zip($var2, { "$args[0] $args[1]" })) { Write-Host $pair }
这几种方案都能输出你期望的结果,本质都是通过索引关联两个数组的对应元素,避免了嵌套foreach带来的笛卡尔积问题。
内容的提问来源于stack exchange,提问作者Akash paul
相关产品推荐
相关产品推荐

