2
MyObject()
{
     String dept;
     List<int> id;
     Object obj;
}

を使用してLINQ、次のように整理された上記のオブジェクトのリストを返すにはどうすればよいですか。

すべての obj オブジェクトを [ department and EQUAL id list ] でグループ化します。同じ番号が含まれている場合、リストは等しいと見なされますが、必ずしも同じ順序 (セット) である必要はありません。

4

2 に答える 2

3

GroupByカスタムを受け入れるオーバーロードがありますIEqualityComparer<MyObject>。が等しいときに2つのオブジェクトが等しいと見なし、等しいと見なされるオブジェクトを記述し、deptそれidを引数として渡します。

セットの等式を実装する便利な方法は、次のように記述します。

new HashSet(x.id).SetEquals(new HashSet(y.id))

ただし、これは非効率的であり、比較することがたくさんある場合はおそらく最善のアイデアではありません。

于 2012-10-03T12:15:35.313 に答える
2

Jon's answerから構築すると、効率が問題になる場合は、 HashSetfor each オブジェクトを匿名オブジェクトに格納できます。

myObjects.Select(x => new { myObject = x, hashSet = new HashSet(x.id) })
         .GroupBy(x => x.hashSet, HashSet<int>.CreateSetComparer())
         .SelectMany(x => x.GroupBy(y => y.myObject.dept))

1 つだけ実行したい場合は、またはカスタム クラスにGroupBy保存できますが、独自の を作成する必要があります。HashSetTupleIEqualityComparer

于 2012-10-03T15:09:42.380 に答える