假設我有一個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. LINQ的使用聚合()的列表
- 4. 如何將聚合更新到集合
- 5. Linq中的代表
- 6. 使用Linq將聚合父/子錶轉換爲SQL和VB.net
- 7. 如何聚合小數使用LINQ
- 8. 使用LINQ在對象列表內部聚合列表
- 9. 如何將界面聚合到城堡動態代理
- 10. LINQ中'1代表什麼?
- 11. 如何使用Javascript將HTML代碼加載到表中?
- 12. 如何更新聚合根目錄中的孫子代碼
- 13. 如何聚合表達SSRS
- 14. 如何在LINQ中重新使用部分選擇代碼來編寫聚合查詢
- 15. 跨多個表的LINQ聚合
- 16. 結合代表
- 17. LINQ中的聚合
- 18. 將項目與Linq混合到一個新列表中
- 19. 如何在代表中使用詞典
- 20. VB如何使用迭代將項添加到類列表?
- 21. 替代「在」表達用於遍歷對象聚合物(0.5.4)
- 22. 如何將KStream聚合到固定大小的列表?
- 23. 應該如何表示將聚合根添加到存儲庫?
- 24. C#代表如何使用代表工作?
- 25. 如何使用Linq將對象投影到列表中?
- 26. 如何將PHP代碼整合到HTML Carousel代碼中?
- 27. MongoDB聚合查詢到java代碼
- 28. 如何使用Ironpython代碼將項目放入XAML組合框/列表框中?
- 29. 如何在linq中使用聚合函數
- 30. 聯合列表使用Linq列表