F # Добавить элемент в последовательность - PullRequest
13 голосов
/ 20 июля 2009

простой вопрос, на который я не могу найти ответ: как добавить элемент в последовательность? Например, у меня есть seq и новый элемент XElem, который я хотел бы добавить к нему.

Спасибо

Ответы [ 3 ]

23 голосов
/ 20 июля 2009

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]
9 голосов
/ 23 июля 2014

Вы также можете использовать

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

Возьми от этого то, что будешь.

5 голосов
/ 30 октября 2009

Существует также императивное решение ...

> 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 };;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...