MyObject()
{
String dept;
List<int> id;
Object obj;
}
使用LINQ
的獨特名單,我怎麼能回組織的上述對象的列表如下:集團的整數
集團通過[部門和平等的ID列表]所有的obj對象。如果列表包含相同的數字,則該列表被視爲相等,不一定是相同的順序(一組)。
MyObject()
{
String dept;
List<int> id;
Object obj;
}
使用LINQ
的獨特名單,我怎麼能回組織的上述對象的列表如下:集團的整數
集團通過[部門和平等的ID列表]所有的obj對象。如果列表包含相同的數字,則該列表被視爲相等,不一定是相同的順序(一組)。
GroupBy
有一個overload接受定製IEqualityComparer<MyObject>
。當dept
相等,並且id
被設置爲相等時,寫一個關於兩個對象相等的方法,並將它作爲參數傳遞。
實行一套平等的簡便方法是寫
new HashSet(x.id).SetEquals(new HashSet(y.id))
雖然這最終會被低效和可能不是最好的主意,如果有很多的比較做出的。
大廈關閉的Jon's answer,如果效率是一個問題,你可以在HashSet
每個對象存儲在一個匿名對象:
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))
如果要執行只有一個GroupBy
你可以存儲在該HashSet
Tuple
或自定義班級,但您必須創建自己的IEqualityComparer
。