我有一个成对的序列,如:Original = [(0,0); (1,2); (3,4)] 我想将这个(int * int)的seq转换为int final = [0,0,1,2,3,4]的seq 任何人都可以建议我这样做的方法吗?
答案 0 :(得分:6)
另一种选择是使用序列表达式 - 我非常喜欢这个选项,但这是个人偏好的问题:
[ for a, b in original do
yield a
yield b ]
答案 1 :(得分:5)
使用List.collect
[(0,0); (1,2); (3,4)] |> List.collect (fun (x,y) -> [x; y])
在你的问题中,你说你想要一个列表在开头,但最后你说序列,无论如何,序列收集也是可用的。
有关详细信息collect
是某些语言中的monadic函数bind或运算符>>=
(C#中的SelectMany),对于列表/序列,它等效于映射后跟一个concat
答案 2 :(得分:2)
[(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类型将具有完整的运营商覆盖范围。