module Hashtbl: Core_hashtbl
For a list of hashtable functions see Hashtbl_intf.S
.
To create a hashtable with string keys use String.Table.
let table = String.Table.create () ~size:4 in
List.iter ~f:(fun (key, data) -> String.Table.replace table ~key ~data)
[ ("A", 1); ("B", 2); ("C", 3); ];
String.Table.find table "C"
Here 4 need only be a guess at the hashtable's future size.
There are other similar pre-made hashtables, eg
Int63.Table or Symbol.Reuters.Table.
To create a hashtable with a custom key type use Hashable.
module Key = struct
module T = struct
type t = String.t * Int63.t with sexp
type sexpable = t
let equal = (=)
let hash = Hashtbl.hash
end
include T
include Hashable.Make (T)
end
let table = Key.Table.create () ~size:4 in
List.iter ~f:(fun (key, data) -> Key.Table.replace table ~key ~data)
[ (("pi", Int63.zero), 3.41459);
(("e", Int63.minus_one), 2.71828);
(("Euler", Int63.one), 0.577215);
];
Key.Table.find table ("pi", Int63.zero)
Performance may improve if you define equal
and hash
explicitly, eg:
let equal (x, y) (x', y') = String.(=) x x' && Int63.(=) y y'
let hash (x, y) = String.hash x + Int63.hash y * 65599
module type Key = Core_hashtbl_intf.Key
val hash : 'a -> int
val hash_param : int -> int -> 'a -> int
module T: sig
.. end
type ('a, 'b)
t = ('a, 'b) T.t
include Access_sig(T)(Key_poly).S
include Binable.S2
include Sexpable.S2
module Poly: sig
.. end
module Make:
module Make_binable: functor (
Key
:
sig
include Core_hashtbl.Key
include Binable.S
end
) ->
sig
.. end