[英]Group by a distinct list of integers
MyObject()
{
String dept;
List<int> id;
Object obj;
}
使用LINQ
,我如何返回上述對象的列表,其組織如下:
按[部門和等號列表]將所有obj對象分組。 如果列表包含相同的數字,而不一定是相同的順序(一組),則認為該列表相等。
GroupBy
具有接受自定義IEqualityComparer<MyObject>
的重載 。 編寫一個在dept
相等且id
為set-equal時將兩個對象視為相等的對象,並將其作為參數傳遞。
實現集合相等的一種簡便方法是編寫
new HashSet(x.id).SetEquals(new HashSet(y.id))
盡管最終將導致效率低下,並且如果進行大量比較可能不是最好的主意。
基於Jon的答案 ,如果效率存在問題,則可以將每個對象的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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.