如何确定一组int中的重复项?

时间:2011-06-27 17:53:53

标签: c# .net collections duplicates

假设我在整数集合中得到以下值:

{1,3,4,5,5,6,7,7}

我期望的结果是{5,7}

我该怎么做?也许使用LINQ?

编辑:输入集合未排序,因此算法不应依赖重复连续。此外,生成的重复集合是否已排序无关紧要。

7 个答案:

答案 0 :(得分:8)

你可以使用LINQ的内置功能来实现这一点,它适用于LINQ提供程序,如LINQ to SQL和EF以及NHibernate:

var dups = collection.GroupBy(x => x)
                     .Where(g => g.Count() > 1)
                     .Select(g => g.Key);

答案 1 :(得分:6)

怎么样:

public static IEnumerable<T> OnlyDupes<T>(this IEnumerable<T> source)
{
    var seen = new HashSet<T>();
    foreach (var item in source)
    {
        // HashSet<T>.Add returns: true if the element is added to the
        // HashSet<T> object; false if the element is already present.
        if (!seen.Add(item)) yield return item;
    }
}

答案 2 :(得分:3)

var list = new List<int>() { 1, 3, 4, 5, 5, 6, 7, 7 };
var duplicates =  list.GroupBy(x => x)
                      .Where(g => g.Count() > 1)
                      .Select(g => g.Key)
                      .ToList();

答案 3 :(得分: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);

来自Finding Duplicates Using LINQ

答案 4 :(得分:3)

var list = new List<int>(){1,3,4,5,5,6,7,7};

var query = ( from i in list
               group i by i into g
               where g.Count() > 1
               select g.Key).ToList();    

答案 5 :(得分:2)

Linq with group by having count将通过计算&gt;向您展示如何执行LINQ组1

在您的具体实例中:

var x = from i in new int[] { 1, 2, 2, 3 }
    group i by i into grp
    where grp.Count() > 1
    select grp.Key;

答案 6 :(得分:1)

如果您使用的是.NET 3.5,请使用HashSet<T>,或Iesi.Collections(NHibernate使用此功能)