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

C#数组去重代码未达预期结果,请求问题排查

问题分析与解决方案

你的代码之所以去重失败,核心问题出在列表初始化的第一步:

List<int> ProductListFinalized = new List<int>(ProductIdList);

这行代码直接把ProductIdList里的所有元素(包括重复项)都复制到了ProductListFinalized中。后面的循环逻辑是检查当前元素是否在ProductListFinalized里,如果不在就添加——但因为初始化时已经把所有元素都放进去了,这个判断永远不会成立,自然不会做任何去重操作,最终的数组当然还带着原列表的重复值。


几种正确的去重实现方式

方法1:使用LINQ的Distinct()(最简洁)

C#提供了现成的去重方法,一行代码就能搞定,效率也高:

ProductIdListForCycleCount = ProductIdList.Distinct().ToArray();

Distinct()会自动遍历列表,返回一个不含重复元素的序列,直接转成数组即可。

方法2:手动实现去重(适合理解底层逻辑)

如果想自己写循环实现,要先初始化一个空列表,再遍历原列表添加不重复的元素:

List<int> ProductListFinalized = new List<int>();
foreach (int productId in ProductIdList)
{
    if (!ProductListFinalized.Contains(productId))
    {
        ProductListFinalized.Add(productId);
    }
}
ProductIdListForCycleCount = ProductListFinalized.ToArray();

这样每遍历一个元素,就检查它是否已经在新列表里,不在才添加,最终得到的就是去重后的结果。

方法3:用HashSet优化性能(适合大数据量)

如果你的ProductIdList元素很多,Contains()方法的时间复杂度是O(n),用HashSet的话Contains()是O(1),性能会更好:

HashSet<int> productIdSet = new HashSet<int>(ProductIdList);
ProductIdListForCycleCount = productIdSet.ToArray();

HashSet本身就不允许重复元素,初始化时会自动去重,之后转成数组即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:06