如何在列表中找到重复的项目<>?

时间:2013-04-07 19:27:05

标签: c# linq list

我有:

List<string> list = new List<string>() { "a", "a", "b", "b", "r", "t" };

我怎样才能得到“a”,“b”?

我试着这样做:

List<string> list = new List<string>() { "a", "a", "b", "b", "r", "t" };
List<string> test_list = new List<string>(); 

test_list = list.Distinct().ToList();

现在test_list有{“a”,“b”,“r”,“t”} 然后:

test_list = test_list.Except(list).ToList();

这是我的失败点,因为Except()删除了所有元素。

你能帮我解决一下吗?

6 个答案:

答案 0 :(得分:16)

List<string> list = new List<string>() { "a", "a", "b", "b", "r", "t" };

var dups = list.GroupBy(x => x)
    .Where(x => x.Count() > 1)
    .Select(x => x.Key)
    .ToList();

答案 1 :(得分:10)

var list = new List<string> { "a", "a", "b", "b", "r", "t" };

var distinct = new HashSet<string>();    
var duplicates = new HashSet<string>();

foreach (var s in list)
    if (!distinct.Add(s))
        duplicates.Add(s);

// distinct == { "a", "b", "r", "t" }
// duplicates == { "a", "b" }

答案 2 :(得分:9)

试试这个

var duplicates = list.GroupBy(a => a).SelectMany(ab => ab.Skip(1).Take(1)).ToList();

答案 3 :(得分:3)

一种简单的方法是使用Enumerable.GroupBy

var dups = list.GroupBy(s => s)
               .Where(g => g.Count() > 1)
               .Select(g => g.Key);

答案 4 :(得分:0)

var duplicates = list.GroupBy(s => s).SelectMany(g => g.Skip(1).Take(1)).ToList();

答案 5 :(得分:0)

var duplicates = list.GroupBy(a => a).SelectMany(ab => ab.Skip(1).Take(1)).ToList();

它比使用Where(g => g.Count() > 1)的效率更高,并且每组只返回一个元素。