list - Ocaml 模式匹配

标签 list pattern-matching ocaml

我对 OCaml 和模式匹配很陌生,所以我很难弄清楚这一点。
假设我有一个元组列表。我想要做的是根据元组中的第一个元素将参数与其中一个元组进行匹配,在这样做时,我想返回元组的第二个元素。例如,我想做这样的事情:

let list = [ "a", 1; "b", 2; "c", 3; "d", 4 ] ;;
let map_left_to_right e rules = match e with 
    | first -> second 
    | first -> second 
    | first -> second
如果我使用 map_left_to_right "b"列表,我想得到 2 作为返回。
因此,我想列出规则列表中的所有第一个元素,并将参数与这些元素之一匹配,但我不知道该怎么做。我在想我需要使用 List.iter 或 List.for_all 来做这样的事情。任何帮助,将不胜感激。谢谢!

最佳答案

模式匹配适用于您想要匹配固定模式列表的情况。在你目前的情况下,惯用的东西是 List.assoc :

let map_left_to_right e rules default = 
  try List.assoc e rules with Not_found -> default

当找不到元素时,您需要提供默认值。在这里,map_left_to_right "b" list 0将按预期返回 2,并且 map_left_to_right "z" list 0将返回 0。

关于list - Ocaml 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688949/

相关文章:

Scala 模式匹配与 Option[Any] 混淆

php - 正则表达式 PHP,将所有链接与特定文本匹配

arrays - 与 AND 类似的 Postgres

python - 列表 append 在 Pandas 单元格中

list - 是否有不同语言的初始列表容量的比较?

ocaml - 创建和分配不必要的回调(initialState...)?

compiler-errors - 为什么编译器说明我要应用许多参数?

list - 如何将 txt 文件中的值解析为 OCaml 中的记录列表?

list - 如何对每个单独的 Int 设置限制

python - 如何检查可迭代对象中是否只有一个值解析为 True?