假設我有一個IEnumerable<Func<object, bool>>
。我想創建一個新的Func<object, bool>
,如果該列表的每個函數在某個對象上調用時返回true,則該函數將返回true。換句話說,我想聚合(減少\ foldl)函數列表。如何使用linq將代表聚合到新代表中
2
A
回答
5
做這樣的:
Func<object, bool> aggregate = o => functions.All(f => f(o));
當然,這是欺騙了一點,因爲函數發生返回bool
所以我們可以用Enumerable.All
直接產生總的結果。這也有副作用,並不是名單中的所有功能都會被調用 - 只要我們收回並退出,就返回false
。
在這種處理與Enumerable.Aggregate
做一般情況下,這可能是這樣的:
Func<object, bool> aggregate = o =>
functions.Select(f => f(o))
.Aggregate(true, (result, @partial) => result && @partial);
0
我會做這樣的:
bool evaluateAllFuncs(object someObject)
{
IEnumerable<Func<object, bool>> funcs = GetAllFuncs();
return funcs.All(f => f(someObject)));
}
1
由於喬恩所指出的,最好的方法是使用Enumerable.All
。但是,您可以摺疊使用Aggregate
所以你也可以做這樣一個順序:
Func<object, bool> folded = funcs.Aggregate((acc, f) => new Func<object, bool>(o => acc(o) && f(o)));
此重載要求序列是非空的,但您可以提供的累加器的初始值:
Func<object, bool> folded = funcs.Aggregate(new Func<object, bool>(_ => true), (acc, f) => (o => acc(o) && f(o)));
相關問題
- 1. 如何使用Linq將列表集合添加到列表中?
- 2. 如何使用Linq的聚合函數添加到列表C#
- 3. Java RGB代碼到csv - 表聚合
- 4. LINQ的使用聚合()的列表
- 5. 使用LINQ的聚合子列表
- 6. LINQ聚合多個表
- 7. 如何將聚合更新到集合
- 8. Linq中的代表
- 9. 使用Linq將聚合父/子錶轉換爲SQL和VB.net
- 10. 如何聚合小數使用LINQ
- 11. 使用LINQ在對象列表內部聚合列表
- 12. 如何凝聚拉姆達代表
- 13. 在LINQ to SQL中的多個表上使用聚合
- 14. 如何將界面聚合到城堡動態代理
- 15. LINQ中'1代表什麼?
- 16. 如何使用Javascript將HTML代碼加載到表中?
- 17. 如何使用Linq組合多個表?
- 18. 如何更新聚合根目錄中的孫子代碼
- 19. 代表 - 如何使用?
- 20. 用聚合物替代querySelectorAll
- 21. 如何聚合表達SSRS
- 22. 如何在LINQ中重新使用部分選擇代碼來編寫聚合查詢
- 23. 跨多個表的LINQ聚合
- 24. 的LINQ聚合的對象和列表
- 25. LINQ中的聚合
- 26. SQL - JOIN聚合表與非聚合表
- 27. 結合代表
- 28. 將項目與Linq混合到一個新列表中
- 29. 如何將三個表格合併到一個新表格中
- 30. Linq到SQL,聚合列,按日期分組到列表視圖