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

C# 从数组中提取重复元素时返回空数组,请问代码存在什么问题?

问题解答

错误原因

  • 你对Except方法的逻辑理解有误:Except()是集合差集运算,返回第一个集合中存在、但第二个集合中不存在的元素。
  • 你先用numbers.Distinct().ToArray()拿到了原数组所有唯一值的集合,原数组的所有元素必然都包含在这个唯一值集合中,再执行numbers.Except(duplicates).ToArray()自然会得到空数组,完全符合Except的设计逻辑。

正确实现方案

要提取数组中的重复元素,核心逻辑是统计每个元素的出现次数,筛选出出现次数≥2的元素即可,你可以用LINQ的GroupBy方法快速实现:

using System;
using System.Linq;

namespace ArrayEx4
{
    internal class Program
    {
        static void Display(int[] x)
        {
            for (int i = 0; i < x.Length; i++)
            {
                Console.WriteLine(x[i]);
            }
        }
        static void Main(string[] args)
        {
            int[] numbers = new int[10];
            for (int i = 0; i < numbers.Length; i++)
            {
                Console.WriteLine("Enter number " + (i + 1) + ": ");
                numbers[i] = Convert.ToInt32(Console.ReadLine());
            }
            // 核心修改:分组统计后筛选重复元素(每个重复元素仅输出一次)
            var duplicates = numbers.GroupBy(n => n)
                                    .Where(g => g.Count() > 1)
                                    .Select(g => g.Key)
                                    .ToArray();
            Console.WriteLine("\n\nProvided data:\n");
            Display(numbers);
            Console.WriteLine("\n\nDuplicates:");
            Display(duplicates);
            Console.ReadLine();
        }
    }
}

如果你需要保留重复元素的所有出现实例(比如数组是[1,2,2,3,3,3],输出结果为[2,2,3,3,3]),可以把核心逻辑改成:

var duplicates = numbers.GroupBy(n => n)
                        .Where(g => g.Count() > 1)
                        .SelectMany(g => g)
                        .ToArray();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:15:03