C# 判断列表是否有重复项

97

需求: 在一个未排序的列表中,确定是否存在重复项。

我通常会使用n平方的嵌套循环来解决这个问题。我想知道其他人是如何解决这个问题的。在Linq中是否有一种优雅、高性能的方法?最好是可以接受lambda或比较器的通用方法。

注意: 这与LINQ查找列表中的重复项不同,后者返回实际的重复项。我只需要知道是否存在重复项。


1
我记得以前在这里看到过这个问题,人们建议一些巧妙的技巧,但我不记得是什么了...等一下...Jon Skeet在附近。 - Peter Perháč
1
你的问题似乎已经得到了回答,你应该相应地标记它,如果不满意,你可以编辑你的问题以更清楚地解释。 ;) - Trinidad
11个回答

-2

还没有看到有人做过这个,所以我刚写了一个小程序。它很简单。使用Contains()方法,但我不知道这种方法的可伸缩性如何。

       Console.WriteLine("Please enter 5 unique numbers....");
        List<int> uniqueNums = new List<int>() { };
        while (uniqueNums.Count < 5)
        {
            int input = Convert.ToInt32(Console.ReadLine());
            if (uniqueNums.Contains(input))
            {
                Console.WriteLine("Add a different number");
            }
            uniqueNums.Add(input);
        }
        uniqueNums.Sort();
        foreach (var n in uniqueNums)
        {
            Console.WriteLine(n);
        }

在我看来,我认为你的回答并没有回答问题。我理解问题是关于,在已有列表中找到重复项。你建议手动填充列表的方法,通过在线输出插入重复项。你还将列表命名为“uniquelist”,但你允许插入重复项,我想这不是你的本意(小错误)。我说得对吗? - Fabiano Tarlao
编辑:查找重复项,-> .. 查找是否包含重复项 :-) - Fabiano Tarlao
我理解你的观点,然而在做这个小练习时(我不是专家,这是我正在学习的课程的一部分),我在寻找一种确定输入是否为列表中重复项的方法时发现了这个页面。因此,答案适用于其他可能不太清楚自己在寻找什么的人们。在研究过程中,我找不到答案“if (uniqueNums.Contains(input))”,所以也许这可以帮助其他编码初学者! :-) 这可能回答了你的另一个问题,是的,输入没有被阻止,那不是练习的一部分。 - wilfy
明白你的观点,但我仍然认为这是错误的。如果一个问题与你所拥有的答案不完全匹配,最好创建一个新问题(针对你的答案),并简单地自我回答同一个问题。这是一种完全合法的做法。此外,由于这个问题不同,人们很难找到你的代码片段,因为它是针对不同的问题。也许在你的情况下,写一篇小博客更有意义。但这只是我的意见。最后一句话:有时候写与问题不符的答案会冒险被踩。问候 - Fabiano Tarlao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接