[英]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.