【问题标题】:Check if there are no repeats in the list检查列表中是否没有重复
【发布时间】:2012-01-10 13:41:36
【问题描述】:

我有一个名为 com 的列表,其中包含一堆整数。我需要检查列表以确保每个整数在列表中只存在一次。 所以如果:

com{1,2,3,4,1,3}

我需要一些代码来检查 1 是否表示为 3 的两倍。 这是我对如何解决它的最佳猜测:

for (int j = 0; j < com.Count; j++)
        {
            if (com.Contains(com[j]))
            {
                lion += 1;
            }
            else
            {
                lion = 0;
            }   
        }

但它不起作用。有谁能帮帮我吗?

【问题讨论】:

    标签: c# list contains


    【解决方案1】:

    这是一种使用 LINQ 的简单但可能不是那么有效的方法:

    using System.Linq;
    
    ...
    
    bool containsRepeats = com.Count() != com.Distinct().Count();
    

    【讨论】:

    • 如果您想知道重复的内容,请参阅pratapchandra's answer
    • 你是我的英雄..我花了过去 3 个小时试图找到一种方法来检查它......
    【解决方案2】:

    您可以通过将每个项目添加到HashSet<T> 来确定集合是否包含重复项。如果项目已经存在,HashSet<T>.Add Method 返回 false:

    public static bool HasDuplicate<T>(this IEnumerable<T> source)
    {
        var h = new HashSet<int>();
        return source.Any(x => !h.Add(x));
    }
    

    如果您只想从集合中删除所有重复项,可以使用Enumerable.Distinct Extension Method:

    var result = new[] { 1, 2, 3, 4, 1, 3 }.Distinct();
    // result == { 1, 2, 3, 4 }
    

    【讨论】:

    • +1 因为我认为它比我的方法更有效,因为它是一个早期的方法。
    【解决方案3】:

    你可以这样尝试..

    int[] listOfItems = new[] { 4, 2, 3, 1, 6, 4, 3 };
    var duplicates = listOfItems
        .GroupBy(i => i)
        .Where(g => g.Count() > 1)
        .Select(g => g.Key);
    foreach (var d in duplicates)
        Console.WriteLine(d);
    

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 1970-01-01
      • 2018-06-19
      • 2021-01-12
      • 2010-12-05
      • 2020-04-04
      • 2020-05-14
      • 2022-11-03
      • 2016-09-12
      相关资源
      最近更新 更多