PowerShell查找排序对象数组重复项遇无限循环问题求助
问题解决:PowerShell查找排序数组重复项的无限循环问题
核心问题分析
- for循环语法错误:你写的
for (($i -eq 1), ($i -lt $arr.Length), ($i++))是PowerShell的错误写法,逗号会创建数组而非定义for循环的初始化、条件、递增三个分句。这导致$i从未被正确初始化为1,也不会在每次循环后递增,直接陷入无限循环。 - 对象全量比较而非属性比较:
$arr[$i] -eq $arr[$i-1]是直接比较两个对象实例,即便它们的Name属性相同,只要是不同的对象实例,这个判断就会返回$false,无法正确识别重复的Name。
修正后的代码
# 用分号分隔for循环的三个逻辑部分,正确初始化并递增$i for ($i = 1; $i -lt $arr.Length; $i++) { # 直接比较对象的Name属性,而非整个对象 if ($arr[$i].Name -eq $arr[$i-1].Name) { Write-Host "Duplicates found: $($arr[$i].Name) and $($arr[$i-1].Name)" } }
可选优化:避免重复输出同一组重复项
如果数组存在连续多个相同Name的元素,上面的代码会多次输出同一重复项,可调整为只在首次检测到重复时输出:
$prevName = $arr[0].Name for ($i = 1; $i -lt $arr.Length; $i++) { if ($arr[$i].Name -eq $prevName) { Write-Host "Duplicate found: $($arr[$i].Name)" } else { $prevName = $arr[$i].Name } }
内容的提问来源于stack exchange,提问作者Wendigo
相关产品推荐
相关产品推荐

