首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个不同类型的列表创建元组

从两个不同类型的列表创建元组
EN

Stack Overflow用户
提问于 2018-11-06 11:18:37
回答 2查看 276关注 0票数 0

我试着去掉圆括号,把它们放在大括号里,等等,但还是没有用。

代码语言:javascript
复制
let rec pairToTuple letter count = // assume that each list is the same, will return a list with (letter, count) in itself
  match letter with
  | [] -> [()]
  | e1::rest1, e2::rest2 -> let tup = (e1, e2) 
                            tup::(pairToTuple rest1 rest2 )

例如:(a,b,c)和(10,20,30)将变成(a,10);(b,20);(c,30)

代码语言:javascript
复制
/home/codio/workspace/program/Program.fs(180,5): error FS0001: This expression was expected to have type    ''a list'    but here has type    ''b * 'c'
[/home/codio/workspace/program/program.fsproj]
EN

回答 2

Stack Overflow用户

发布于 2018-11-07 04:14:57

那么List.zip函数呢?

代码语言:javascript
复制
> List.zip ["a"; "b"; "c"; "d"] [1; 2; 3; 4];;
val it : (string * int) list = [("a", 1); ("b", 2); ("c", 3); ("d", 4)]
票数 2
EN

Stack Overflow用户

发布于 2018-11-06 12:11:57

您可以简单地使用List.map2 function

代码语言:javascript
复制
let pairToTuple letterList countList =
    List.map2 (fun letter count -> (letter, count)) letterList countList

或者你可以用F#的习惯用法把它写得更短:

代码语言:javascript
复制
let pairToTuple = List.map2 (fun letter count -> (letter, count))

如果你的问题是一个练习,并且你不想使用List.map2,那么:

代码语言:javascript
复制
let rec pairToTuple letterList countList =
    match letterList, countList with
    | [], _ -> []
    | _, [] -> []
    | letter :: res1, count :: res2 ->
        (letter, count) :: pairToTuple res1 res2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53165312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档