1

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

これを行う方法はありますか?

4

2 に答える 2

5

要素が 1 つだけのグループを取得するには、次のようにします。

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();
于 2013-02-23T22:23:21.157 に答える
4

最初に項目をグループ化します。

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();
于 2013-02-23T22:26:32.667 に答える