C# LINQ查找List中的重复项

11 浏览
0 Comments

C# LINQ查找List中的重复项

使用LINQ,从一个List中,如何检索出包含重复条目及其值的列表?

admin 更改状态以发布 2023年5月20日
0
0 Comments

判断一个可枚举对象是否包含任何重复项

var anyDuplicate = enumerable.GroupBy(x => x.Key).Any(g => g.Count() > 1);

判断一个可枚举对象中的所有值是否都是唯一的

var allUnique = enumerable.GroupBy(x => x.Key).All(g => g.Count() == 1);

0
0 Comments

解决这个问题最简单的方法是根据元素的值进行分组,如果组中有多个元素,则选择一个代表来解决。在 LINQ 中,这可以转换为:

var query = lst.GroupBy(x => x)
              .Where(g => g.Count() > 1)
              .Select(y => y.Key)
              .ToList();

如果你想知道元素被重复了多少次,可以使用:

var query = lst.GroupBy(x => x)
              .Where(g => g.Count() > 1)
              .Select(y => new { Element = y.Key, Counter = y.Count() })
              .ToList();

这将返回一个匿名类型的 List,每个元素都有 Element 和 Counter 两个属性,可检索所需的信息。

最后,如果你在寻找一个字典,你可以使用:

var query = lst.GroupBy(x => x)
              .Where(g => g.Count() > 1)
              .ToDictionary(x => x.Key, y => y.Count());

这将返回一个字典,其 key 为元素,值为其重复的次数。

0