luk*_*ler 15 c# linq functional-programming system.reactive
Erik Meijer喜欢指出每个LINQ函数实际上都可以由SelectMany实现; 其他一切都只是一种便利.
这就是Eric Lippert在回答有关monad的问题时所说的,但我听说Erik Meijer在其他关于LINQ和Rx的视频中这样说.(简单地说,Erik Meijer是创建LINQ和Rx的人)
我想知道如何用SelectMany实现一些最常用的LINQ函数? 暂时忽略性能,让我们专注于优雅和简洁.
要记住的主要一点是,使用可以访问当前项及其索引的 lambda 表达式来处理SelectManyanIEnumerable并返回 an 。IEnumerable因此,您可以通过访问当前项目或其索引来转换结果:
Where, First, Take, Skip, TakeWhile)Select)GroupBy,老实说,我不知道如何不加思考地实现它)这个简单的Where例子将清楚地表明其中有多少可以轻松完成:
SomeList.SelectMany(x =>
ShouldBeIncluded(x) ?
Enumerable.Repeat(x, 1) :
Enumerable.Empty<AClass>();
);
Run Code Online (Sandbox Code Playgroud)
编辑 - 蒂姆·施梅尔特在评论中发布的精彩链接再次证明乔恩·斯基特已经做得更干净了:
return Enumerable.Repeat(x, ShouldBeIncluded(x) ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |