【问题标题】:F# Add an element to a sequenceF# 向序列中添加元素
【发布时间】:2023-04-02 19:10:01
【问题描述】:

一个我找不到答案的简单问题:如何将元素添加到序列中?例如,我有一个 seq 和一个 newElem XElement 我想附加到它。

谢谢

【问题讨论】:

    标签: f#


    【解决方案1】:

    Seq.append:

    > let x = { 1 .. 5 };;
    
    val x : seq<int>
    
    > let y = Seq.append x [9];; // [9] is a single-element list literal
    
    val y : seq<int>
    
    > y |> Seq.toList;;
    val it : int list = [1; 2; 3; 4; 5; 9]
    

    【讨论】:

    • 应该补充一下,这不是向序列中添加元素,而是创建一个添加了额外元素的新序列?
    【解决方案2】:

    你也可以使用

    let newSeq = Seq.append oldSeq (Seq.singleton newElem)
    

    这是对第一个答案的轻微修改,但将序列而不是列表附加到序列。

    给定以下代码

    let startSeq = seq {1..100}
    let AppendTest = Seq.append startSeq [101] |> List.ofSeq
    let AppendTest2 = Seq.append startSeq (Seq.singleton 101) |> List.ofSeq
    let AppendTest3 = seq { yield! startSeq; yield 101 } |> List.ofSeq
    

    循环执行 10000 次,运行时间为

    Elapsed 00:00:00.0001399
    Elapsed 00:00:00.0000942
    Elapsed 00:00:00.0000821
    

    随心所欲。

    【讨论】:

      【解决方案3】:

      还有一个命令式的解决方案...

      > let x = seq {1..5}
      > let y = seq { yield! x; yield 9 }  // Flatten the list,then append your element
      > Seq.to_list y;;
      val it : int list = [1; 2; 3; 4; 5; 9]
      

      如果潜在问题是命令式问题,这可能会更好,并且在循环中使用 yield 语句是最自然的。

      let mySeq = seq { for i in 1..10 do yield i };;
      

      【讨论】:

        猜你喜欢
        • 2021-11-09
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        相关资源
        最近更新 更多