重复F#中的序列

nic*_*las 7 f#

我有一个'压缩'的值流,附加了该值的出现次数,例如:

let a = [ (),1; (),4; (),3;]
Run Code Online (Sandbox Code Playgroud)

我想'解压缩'那个序列并发出原始序列.我可以定义一个重复组合来产生!为此

let rec repeat avalue n =  seq { if n > 0 then 
                                    yield avalue; yield! repeat avalue (n-1) }

let b = seq { for v,n in a do
                yield! repeat v n }  |> Seq.toList
Run Code Online (Sandbox Code Playgroud)

有没有办法以组合的形式表达内联?

let c = a |> Seq.XXX(fun e -> ...) 
Run Code Online (Sandbox Code Playgroud)

Mis*_*hor 6

你可以这样做Enumerable.Repeat:

> Seq.collect Enumerable.Repeat [ 1, 2; 3, 4; 5, 6 ] |> List.ofSeq;;
val it : int list = [1; 1; 3; 3; 3; 3; 5; 5; 5; 5; 5; 5]
Run Code Online (Sandbox Code Playgroud)

  • 现在还有[`List.replicate <'T>`](https://msdn.microsoft.com/en-us/library/ee353665.aspx). (2认同)