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

列表去重算法异常:无法移除全部重复项,仍保留每个数字最后两个重复项

列表去重算法问题修复

你的代码没法彻底移除重复项,会留下最后两个重复值,问题出在删除元素后的循环逻辑:当调用primeNumbers.RemoveAt(j)删除j位置的元素时,列表中j位置之后的所有元素都会向前移动一位,但你的j仍会执行j = j + 1,这就跳过了原本在j+1位置、现在移到j位置的元素。如果有三个及以上重复项,就会漏掉一次检查,最终保留两个重复值。

修复方案一:调整内层循环的自增逻辑

删除元素后不立即自增j,只有当当前元素不重复时才让j前进,这样就能确保每个位置都被检查到:

for (int i = 0; i < primeNumbers.Count; i++)
{
    for (int j = i + 1; j < primeNumbers.Count;)
    {
        if (primeNumbers[i] == primeNumbers[j])
        {
            primeNumbers.RemoveAt(j);
        }
        else
        {
            j++; // 仅当无删除操作时才自增j
        }
    }
}

// 遍历输出更简洁的写法
foreach (var number in primeNumbers)
{
    Console.WriteLine(number);
}

修复方案二:使用LINQ的Distinct()方法(更简洁高效)

C#的LINQ提供了现成的去重方法,直接生成去重后的新列表,避免手动循环出错:

// 生成去重后的新列表
var uniquePrimeNumbers = primeNumbers.Distinct().ToList();

foreach (var number in uniquePrimeNumbers)
{
    Console.WriteLine(number);
}

注意:方案一是直接修改原列表,方案二是创建新列表,可根据实际需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:35:23