【发布时间】:2023-04-02 19:10:01
【问题描述】:
一个我找不到答案的简单问题:如何将元素添加到序列中?例如,我有一个 seq 和一个 newElem XElement 我想附加到它。
谢谢
【问题讨论】:
标签: f#
一个我找不到答案的简单问题:如何将元素添加到序列中?例如,我有一个 seq 和一个 newElem XElement 我想附加到它。
谢谢
【问题讨论】:
标签: f#
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]
【讨论】:
你也可以使用
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
随心所欲。
【讨论】:
还有一个命令式的解决方案...
> 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 };;
【讨论】: