如何在列表<>中查找重复项?

Mon*_*pom 7 c# linq list

我有:

List<string> list = new List<string>() { "a", "a", "b", "b", "r", "t" };
Run Code Online (Sandbox Code Playgroud)

我怎么才能得到"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();
Run Code Online (Sandbox Code Playgroud)

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

test_list = test_list.Except(list).ToList();
Run Code Online (Sandbox Code Playgroud)

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

你能帮我解决一下吗?

I4V*_*I4V 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();
Run Code Online (Sandbox Code Playgroud)

  • 这更具可读性和可理解性,谢谢 (2认同)

dtb*_*dtb 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" }
Run Code Online (Sandbox Code Playgroud)

  • +1可能是最有效的方法. (2认同)

Sac*_*hin 8

试试这个

var duplicates = list.GroupBy(a => a).SelectMany(ab => ab.Skip(1).Take(1)).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么这个答案被赞成.有人试过`{"a","a","b","b","a","r","t"}`? (6认同)
  • @ChrisSinclair嗯,我认为重点是这*不起作用.如果你输入`{"a","a","b","b","a","r","t"}`你就会得到"a""a""b"` (2认同)