F# 元组列表上的模式匹配
我试图创建一个函数来匹配一个结构,该结构是一个元组,包含一个值和一个表单的元组列表F# 元组列表上的模式匹配,f#,F#,我试图创建一个函数来匹配一个结构,该结构是一个元组,包含一个值和一个表单的元组列表 'a * ('b * 'c) list -> 'b list 例如: let clubDetails = ("MyClub", [("Secretary", "Jill");("Captain", "Bob");("Email", "Bob@MyClub.com")]) 我需要一个函数来返回列表[“秘书”;“船长”;“电子邮件”] 所以我想我可以这样做: let getClubAttributes ca
'a * ('b * 'c) list -> 'b list
例如:
let clubDetails = ("MyClub", [("Secretary", "Jill");("Captain", "Bob");("Email", "Bob@MyClub.com")])
我需要一个函数来返回列表[“秘书”;“船长”;“电子邮件”]
所以我想我可以这样做:
let getClubAttributes ca =
match ca with
| (a, [(b,c)]) -> [b]
| _ -> []
但是这里
getClubAttributes clubDetails
返回空列表。我觉得我错过了一些很明显的东西
谢谢,
Russell。只有当元组中的
列表
只有一个元素时,您编写的模式匹配表单才会匹配
我注意到,您在模式匹配中编写了一个默认的\uuu
大小写,它返回空列表,这就是您要命中的大小写。我怀疑您添加此案例是为了删除编译器警告,但编译器警告实际上是在警告您这个确切的问题
实际上,您不需要模式匹配,因为您的数据结构只能处理一种情况
let clubDetails = ("MyClub", [("Secretary", "Jill");("Captain", "Bob");("Email", "Bob@MyClub.com")])
let getClubAttributes (ca, attribList) =
List.map fst attribList
新的
getClubAttributes
函数通过获取列表中每个项目的第一个元素,简单地从原始列表创建一个新列表。是的,您的匹配列表只有一个值,我的意思是,如果您的列表是这样的-(“MyClub”,“Secretary”,“Jill”)
,那么,如果你想写让getClubAttributes=snd>>List.map fst
很高兴能帮上忙,你应该加入-这是学习F的好地方#