[英]F# take a list, return list of tuples
我做了一些研究,我发现List.zip函数有两个列表并返回一个元组列表,但是如何将一个列表更改为元组列表?
let rec combinePair xs =
match xs with
| [] -> []
| [x1] -> []
| x1::x2::x3::xs -> [(x1, x2)]
| x1::x2::xs -> [(x1, x2)]
如果列表中存在奇数个元素,则应删除最后一个元素,如果存在偶数个元素,则应将它们作为元组列表返回。 例如
combinePair [x1; x2; x3; x4] = [(x1, x2); (x3, x4)]
你的代码几乎就在那里。
这是思考:
这几乎可以完全翻译成F#:
let rec combinePair xs =
match xs with
| [] | [_] -> []
| x1::x2::rest -> (x1, x2) :: (combinePair rest)
(注意我如何将前两种情况合并在一行, [] | [_] ->
)
我确信有更漂亮的解决方案,但对于那些对递归过敏的人:
let xsOdd = [1;2;3;4;5]
List.chunkBySize 2 xsOdd
|> List.filter (fun x -> x.Length = 2)
|> List.map (fun x -> x.[0],x.[1])
//val it : (int * int) list = [(1, 2); (3, 4)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.