Scroll to navigation

Hashtbl(3o) OCaml library Hashtbl(3o)

NAME

Hashtbl - Hash tables and hash functions.

Module

Module Hashtbl

Documentation

Module Hashtbl
: sig end
 
 
Hash tables and hash functions.
 
Hash tables are hashed association tables, with in-place modification.
 
 
 
 
 
 
 
 
=== Generic interface ===
 
type ('a, 'b) t
 
 
The type of hash tables from type 'a to type 'b .
 
 
 
 
val create : int -> ('a, 'b) t
 
 
Hashtbl.create n creates a new, empty hash table, with initial size n . For best results, n should be on the order of the expected number of elements that will be in the table. The table grows as needed, so n is just an initial guess.
 
 
 
 
val clear : ('a, 'b) t -> unit
 
Empty a hash table.
 
 
 
 
val add : ('a, 'b) t -> 'a -> 'b -> unit
 
 
Hashtbl.add tbl x y adds a binding of x to y in table tbl . Previous bindings for x are not removed, but simply hidden. That is, after performing Hashtbl.remove tbl x , the previous binding for x , if any, is restored. (Same behavior as with association lists.)
 
 
 
 
val copy : ('a, 'b) t -> ('a, 'b) t
 
Return a copy of the given hashtable.
 
 
 
 
val find : ('a, 'b) t -> 'a -> 'b
 
 
Hashtbl.find tbl x returns the current binding of x in tbl , or raises Not_found if no such binding exists.
 
 
 
 
val find_all : ('a, 'b) t -> 'a -> 'b list
 
 
Hashtbl.find_all tbl x returns the list of all data associated with x in tbl . The current binding is returned first, then the previous bindings, in reverse order of introduction in the table.
 
 
 
 
val mem : ('a, 'b) t -> 'a -> bool
 
 
Hashtbl.mem tbl x checks if x is bound in tbl .
 
 
 
 
val remove : ('a, 'b) t -> 'a -> unit
 
 
Hashtbl.remove tbl x removes the current binding of x in tbl , restoring the previous binding if it exists. It does nothing if x is not bound in tbl .
 
 
 
 
val replace : ('a, 'b) t -> 'a -> 'b -> unit
 
 
Hashtbl.replace tbl x y replaces the current binding of x in tbl by a binding of x to y . If x is unbound in tbl , a binding of x to y is added to tbl . This is functionally equivalent to Hashtbl.remove tbl x followed by Hashtbl.add tbl x y .
 
 
 
 
val iter : ('a -> 'b -> unit) -> ('a, 'b) t -> unit
 
 
Hashtbl.iter f tbl applies f to all bindings in table tbl . f receives the key as first argument, and the associated value as second argument. Each binding is presented exactly once to f . The order in which the bindings are passed to f is unspecified. However, if the table contains several bindings for the same key, they are passed to f in reverse order of introduction, that is, the most recent binding is passed first.
 
 
 
 
val fold : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) t -> 'c -> 'c
 
 
Hashtbl.fold f tbl init computes (f kN dN ... (f k1 d1 init)...) , where k1 ... kN are the keys of all bindings in tbl , and d1 ... dN are the associated values. Each binding is presented exactly once to f . The order in which the bindings are passed to f is unspecified. However, if the table contains several bindings for the same key, they are passed to f in reverse order of introduction, that is, the most recent binding is passed first.
 
 
 
 
val length : ('a, 'b) t -> int
 
 
Hashtbl.length tbl returns the number of bindings in tbl . Multiple bindings are counted multiply, so Hashtbl.length gives the number of times Hashtbl.iter calls its first argument.
 
 
 
 
 
=== Functorial interface ===
 
module type HashedType = sig end
 
 
The input signature of the functor Hashtbl.Make .
 
 
 
module type S = sig end
 
 
The output signature of the functor Hashtbl.Make .
 
 
 
module Make : functor (H : HashedType) -> sig end
 
 
Functor building an implementation of the hashtable structure. The functor Hashtbl.Make returns a structure containing a type key of keys and a type 'a t of hash tables associating data of type 'a to keys of type key . The operations perform similarly to those of the generic interface, but use the hashing and equality functions specified in the functor argument H instead of generic equality and hashing.
 
 
 
 
 
=== The polymorphic hash primitive ===
 
 
val hash : 'a -> int
 
 
Hashtbl.hash x associates a positive integer to any value of any type. It is guaranteed that if x = y or Pervasives.compare x y = 0 , then hash x = hash y . Moreover, hash always terminates, even on cyclic structures.
 
 
 
 
val hash_param : int -> int -> 'a -> int
 
 
Hashtbl.hash_param n m x computes a hash value for x , with the same properties as for hash . The two extra parameters n and m give more precise control over hashing. Hashing performs a depth-first, right-to-left traversal of the structure x , stopping after n meaningful nodes were encountered, or m nodes, meaningful or not, were encountered. Meaningful nodes are: integers; floating-point numbers; strings; characters; booleans; and constant constructors. Larger values of m and n means that more nodes are taken into account to compute the final hash value, and therefore collisions are less likely to happen. However, hashing takes longer. The parameters m and n govern the tradeoff between accuracy and speed.
 
 
 
2012-06-26 OCamldoc