假设我有一个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列表