经过相当多的搜索,我找不到与Enumerable.DefaultIfEmpty相当的F#.
F#中是否存在类似的东西(也许是以不同的,惯用的方式)?
为了保持序列的懒惰,我们可以使用枚举器的状态.
let DefaultIfEmpty (l:'t seq) (d:'t) =
seq{
use en = l.GetEnumerator()
if en.MoveNext() then
yield en.Current
while en.MoveNext() do
yield en.Current
else
yield d }
Run Code Online (Sandbox Code Playgroud)
Seq
模块函数操作和返回IEnumerable<_>
以及DefaultIfEmpty
操作和返回IEnumerable<_>
。将其包装在可组合的函数中怎么样?
let inline DefaultIfEmpty d l = System.Linq.Enumerable.DefaultIfEmpty(l, d)
Run Code Online (Sandbox Code Playgroud)
这也保留了懒惰。
例子:
Seq.empty |> DefaultIfEmpty 0
Run Code Online (Sandbox Code Playgroud)
更新
我制作了一个内联许多扩展和静态方法的开源库,包括Enumerable.defaultIfEmpty
-- ComposableExtesions
归档时间: |
|
查看次数: |
417 次 |
最近记录: |