簡體   English   中英

如何在F#中將(int * int)列表轉換為(int:列表)

[英]How to convert (int* int) list to (int: list) in F#

我有一個成對的序列,例如:Original = [(0,0); (1,2); (3,4)]我想將此(int * int)的序列轉換為int的序列Final = [0,0,1,2,3,4]有人可以建議我這樣做的方法嗎?

另一個選擇是使用序列表達式-我很喜歡這個選項,但這是個人喜好的問題:

[ for a, b in original do
    yield a
    yield b ]

使用List.collect

[(0,0); (1,2); (3,4)] |> List.collect (fun (x,y) -> [x; y])

在您的問題中,您說您希望在開始時有一個列表,但最后您要說出序列,無論如何也可以使用序列收集。

有關更多信息,請collect某些語言(在C#中為SelectMany)中的monadic函數bind或運算符>>= (對於列表/序列而言,其等效於映射后跟concat)。

[(0,0); (1,2); (3,4)] |> List.map(fun (x,y)->[x; y]) |> List.concat

即。 將元組序列映射到列表列表,然后將列表連接在一起

要么

[(0,0); (1,2); (3,4)] |> Seq.map(fun (x,y)->seq { yield x; yield y}) |> Seq.concat |> Seq.toList

我首先想到了更長的Seq版本,因為傳統上Seq模塊需要更多的運算符。 但是,在F#4中,Seq,List和Array類型將具有完整的運算符覆蓋范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM