假设我在整数集合中得到以下值:
{1,3,4,5,5,6,7,7}
我期望的结果是{5,7}
。
我该怎么做?也许使用LINQ?
编辑:输入集合未排序,因此算法不应依赖重复连续。此外,生成的重复集合是否已排序无关紧要。
答案 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);
答案 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使用此功能)