Linq按唯一值对对象进行分组,并生成两个列表

本文关键字:列表 两个 唯一 对象 Linq | 更新日期: 2023-09-27 18:00:39

我有一个对象数组,其中包含属性Number。我需要按值对它们进行分组,即对象包含这些样本值:

1 2 3 3 3 4 5 6 6 6 7 7

我必须这样对它们进行分组:

listOfUniqe = {1,2,4,5}
listOfDuplicates1 = {3,3,3}
listOfDuplicates2 = {6,6,6}
listOfDuplicates3 = {7,7}
...

我尝试将distinct与First()一起使用。但这区分了我的第一次出现,并删除了重复。如果对象有重复项,我也要删除第一次出现的对象,并将它们移到另一个列表中。

List<Reports> distinct = new List<Reports>;
distinct = ArrayOfObjects.GroupBy(p => p.Number).Select(g => g.First()).ToList();

你知道我该怎么做吗?

Linq按唯一值对对象进行分组,并生成两个列表

要获得只有一个元素的组,请使用:

distinct = ArrayOfObjects.GroupBy(p => p.Number)
                         .Where(g => g.Count() == 1)
                         .ToList();

要获得包含更多元素的组的列表,请使用:

nonDistinct = ArrayOfObjects.GroupBy(p => p.Number)
                            .Where(g => g.Count() > 1)
                            .Select(g => g.ToList())
                            .ToList();

第一组项目:

var groups = values.GroupBy(p => p.Number).ToList();

唯一的是组计数为1的:

var unique = groups.Where(g => g.Count() == 1).Select(g => g.Single()).ToList();

有重复的是其他的:

var nonUnique = groups.Where(g => g.Count() > 1).ToList();