Ocaml 双哈希 table
Ocaml double hash table
我一直在寻找一种在 Ocaml 中使用双散列 table 的方法,但找不到。我想做的是:
哈希:(("a",1), ("b",2), ...)
,其中所有提到的元素都不重复,例如,“a”不会再次出现,也不会出现 2.
所以如果我找到像 [1, "b", 2, "a",...]
这样的数组,我可以用它的键或值替换那些出现的数字和字母:["a",2,"b",1,...]
.
谢谢!
库容器数据有 CCBijections。
如果你想要一个可变版本,你可以将两个哈希表与
配对
module Table: sig
type (!'left, !'right) t
(* or before OCaml 4.12:
type (!'left, !'right) t
*)
val add: 'left ->'right -> ('left,'right) t -> unit
...
end = struct
type ('a,'b) t = {left:('a,'b) Hashtbl.t; right:('b,'a) Hashtbl.t }
let add left right tbl =
Hashtbl.add tbl.left left right;
Hashtbl.add tbl.right right left
...
end
我一直在寻找一种在 Ocaml 中使用双散列 table 的方法,但找不到。我想做的是:
哈希:(("a",1), ("b",2), ...)
,其中所有提到的元素都不重复,例如,“a”不会再次出现,也不会出现 2.
所以如果我找到像 [1, "b", 2, "a",...]
这样的数组,我可以用它的键或值替换那些出现的数字和字母:["a",2,"b",1,...]
.
谢谢!
库容器数据有 CCBijections。
如果你想要一个可变版本,你可以将两个哈希表与
配对module Table: sig
type (!'left, !'right) t
(* or before OCaml 4.12:
type (!'left, !'right) t
*)
val add: 'left ->'right -> ('left,'right) t -> unit
...
end = struct
type ('a,'b) t = {left:('a,'b) Hashtbl.t; right:('b,'a) Hashtbl.t }
let add left right tbl =
Hashtbl.add tbl.left left right;
Hashtbl.add tbl.right right left
...
end