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

本文关键字:项目 lt gt 列表 查找 | 更新日期: 2023-09-27 18:07:50

我有:

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((删除了所有元素。

你能帮我解决问题吗

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

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();
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" }

试试这个

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

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

var dups = list.GroupBy(s => s)
               .Where(g => g.Count() > 1)
               .Select(g => g.Key);
var duplicates = list.GroupBy(a => a).SelectMany(ab => ab.Skip(1).Take(1)).ToList();

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

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