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

PowerShell中While循环-and条件不符合预期的问题求助

PowerShell循环逻辑修正建议

当前的While循环条件($CurrLine1 -lt $LastLine1) -and ($CurrLine2 -lt $LastLine2)会导致只要任意一个数组遍历到结尾,循环就立即停止,这和你期望的“两个数组都遍历完才停止”不符。比如当$CurrLine2 -eq $LastLine2时,即使$CurrLine1还没到结尾,循环也会终止,导致In1的剩余内容未处理。

修正循环条件

将循环条件改为只要任意一个数组还有未遍历的元素,就继续循环,以下两种写法等价:

  1. 使用-or逻辑(更直观):
While (($CurrLine1 -lt $LastLine1) -or ($CurrLine2 -lt $LastLine2))
  1. 直接表达“未同时遍历完两个数组”:
While (-not (($CurrLine1 -eq $LastLine1) -and ($CurrLine2 -eq $LastLine2)))

补充边界处理逻辑

修改循环条件后,必须在循环内部处理其中一个数组已遍历完的情况,避免索引越界,同时确保剩余元素被正确写入$Out1:

While (($CurrLine1 -lt $LastLine1) -or ($CurrLine2 -lt $LastLine2))
{
    # 若In1已遍历完,直接写入In2剩余元素
    if ($CurrLine1 -ge $LastLine1) {
        $Out1[$CurrLine3] = $In2[$CurrLine2]
        $CurrLine2++
        $CurrLine3++
        continue
    }
    # 若In2已遍历完,直接写入In1剩余元素
    if ($CurrLine2 -ge $LastLine2) {
        $Out1[$CurrLine3] = $In1[$CurrLine1]
        $CurrLine1++
        $CurrLine3++
        continue
    }

    # 原有的字符串对比逻辑(仅当两个数组均有未遍历元素时执行)
    $in1Str = $In1[$CurrLine1]
    $in2Str = $In2[$CurrLine2]
    # 简化原Substring调用:截取0到字符串长度的子串等价于原字符串
    if ($in1Str -eq $in2Str.Substring(0, $in1Str.Length)) 
    {
        # Merge data from $In2 into $Out1
        $Out1[$CurrLine3] = $In2[$CurrLine2]
        $CurrLine1++
        $CurrLine2++
    }
    elseif ($in1Str -lt $in2Str.Substring(0, $in1Str.Length)) 
    {
        # Insert new record from In1 into Out1
        $Out1[$CurrLine3] = $In1[$CurrLine1]
        $CurrLine1++
    }
    else 
    {
        # Drop record from In2 as presumably film deleted
        $CurrLine2++
    }
    $CurrLine3++ # 确保每次写入后索引递增,避免覆盖数据
}

额外优化说明

  • 原代码中($In1[$CurrLine1]).Substring(0, ($In1[$CurrLine1]).Length)完全等价于直接使用$In1[$CurrLine1],可直接简化,减少不必要的字符串操作。
  • 原代码未对$CurrLine3进行递增操作,会导致$Out1始终覆盖同一索引位置的内容,必须在每次写入元素后递增该索引。

内容的提问来源于stack exchange,提问作者HotStuff669

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:31:16