代码之家  ›  专栏  ›  技术社区  ›  Boiethios

如何在迭代器上循环?

  •  3
  • Boiethios  · 技术社区  · 8 年前

    在Rust中,可以在迭代器上循环。例如:

    fn main() {
        for i in (1..4).cycle().take(5) {
            print!("{} ", i);
        }
    }
    

    输出:

    1 2 3 1 2 
    

    如何在F#中执行相同操作?

    [<EntryPoint>]
    let main argv =
        seq { 1 .. 4 } |> (* Something *) |> Seq.take 5 |> Seq.iter (printf "%d ")
        0
    
    1 回复  |  直到 8 年前
        1
  •  7
  •   CaringDev    8 年前

    我不知道任何内置函数,但您可以轻松创建自己的:

    let cycle items = seq {
        while true do
            yield! items
    }
    

    let cycle' items =
        Seq.initInfinite (fun _ -> items) |> Seq.concat
    

    let rec cycle'' items = seq {
        yield! items
        yield! cycle'' items
    }
    

    然后

    // 1 2 3 1 2
    seq { 1 .. 3 } |> cycle |> Seq.take 5 |> Seq.iter (printf "%d ")