OCaml将字符串映射到字符串列表

DC0*_*C00 5 python ocaml

我正在尝试在OCaml中创建一个字典,将字符串映射到字符串列表.我已经引用了教程的基本字符串到字符串映射,但我需要一些帮助制作列表.

这是我想用Python做的事情:

>>> food = {}
>>> food["fruit"] = ("blueberry", "strawberry", "kiwi")
>>> food["veggie"] = ("broccoli", "kale")
>>> for k in food:
...     for v in food[k]:
...         print k, "-->",v
...
fruit --> blueberry
fruit --> strawberry
fruit --> kiwi
veggie --> broccoli
veggie --> kale
Run Code Online (Sandbox Code Playgroud)

提前致谢

ivg*_*ivg 5

你可以使用列表,

let food = [
  "fruit",  ["blueberry"; "strawberry"; "kiwi"];
  "veggie", ["broccoli"; "kale"]
]
Run Code Online (Sandbox Code Playgroud)

List.assoc用来访问它:

List.assoc "fruit" food
Run Code Online (Sandbox Code Playgroud)

将评估为

- : string list = ["blueberry"; "strawberry"; "kiwi"]
Run Code Online (Sandbox Code Playgroud)

如果您需要使用对数搜索的真实地图,那么您可以使用Map模块.在标准库中,它提供了一个函子Make,它将为用户提供的数据创建一个映射,例如,

module Strings = Map.Make(String)
Run Code Online (Sandbox Code Playgroud)

将创建一个模块Strings,它是从string类型到其他任何地方的映射.您可以轻松地使用列表作为您的值类型:

let map = Strings.empty 
Strings.add "fruit" ["blueberry"; "strawberry"; "kiwi"] map
Run Code Online (Sandbox Code Playgroud)

当然,这将创建一个持久的地图.如果你需要一个可变的地图,比如在python中,那么你需要一个Hashtbl模块.

这是一个例子Hashtbl:

let food = Hashtbl.create 16
Hashtbl.add food "fruit" ["blueberry"; "strawberry"; "kiwi"]
Hashtbl.add food "veggie" ["broccoli"; "kale"]
Hashtbl.find food "veggie"
Run Code Online (Sandbox Code Playgroud)

将评估为

- : string list = ["broccoli"; "kale"]
Run Code Online (Sandbox Code Playgroud)