Как инициализировать карту из списка в OCaml? - PullRequest
1 голос
/ 15 апреля 2020

Использование Map.empty и Map.add является многословным, есть ли что-то вроде:

Map.of_list [(1,"A"); (2,"B"); (3,"C")];;

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Я не уверен, что следующее лучший способ сделать это, но, тем не менее, это может быть полезно:

Вы можете использовать List.to_seq и Map.of_seq :

module M = Map.Make(struct type t = int let compare = compare end)

let m = [(1,"A"); (2,"B"); (3,"C")] |> List.to_seq |> M.of_seq

С уменьшением это может быть что-то вроде этого:

let m = List.fold_left (fun m (k,v) -> M.add k v m) M.empty [(1,"A"); (2,"B"); (3,"C")]
1 голос
/ 15 апреля 2020

Если вы используете База , модуль Карты базы выставляет Map.of_alist:

Map.of_alist (module Int) [(1, "A"); (2, "B"); (3, "C")];;

Если вы уверены, что в вашем списке нет дубликатов, вы можно звонить Map.of_alist_exn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...