You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:57:31