F#如何从列表中获取某些值
我有一个选项列表,例如[Some 1;Some 2]。我的目标是在不使用模式匹配和options.get函数的情况下获取某些元素的值 我有一个testfunction,它返回('a->'b)option->'a option->'b option。 为了实现我的目标,我如何使用此功能F#如何从列表中获取某些值,f#,F#,我有一个选项列表,例如[Some 1;Some 2]。我的目标是在不使用模式匹配和options.get函数的情况下获取某些元素的值 我有一个testfunction,它返回('a->'b)option->'a option->'b option。 为了实现我的目标,我如何使用此功能 let test xa xb = match xa with | None -> None | Some el -> Option.map el xa 您可以使用列表获取某些元素的值。选
let test xa xb =
match xa with
| None -> None
| Some el -> Option.map el xa
您可以使用
列表获取某些
元素的值。选择
函数,它几乎完全可以做到这一点
[Some 1; Some 2] |> List.choose id
// Returns [1; 2]
List.choose
函数的语义是,它允许您通过提供一个函数来选择列表中的某些元素,该函数为每个元素返回some
或None
。函数为其返回None
的元素将被丢弃,而某些结果将被展开并作为列表返回。您可以将此函数视为一体的map
和filter
的组合
因为列表中的元素已经是选项
类型,所以您选择的函数应该是id
,这是一个标准的库函数,只需返回其参数不变即可。可能的重复项我可以用list实现它。foldback?@BDermier您可以用fold实现任何功能。但是折叠函数需要包含模式匹配,OP出于某种原因不想这样做。