(* * $Id: hash2.ocaml,v 1.3 2001/01/08 13:21:09 doug Exp $ * http://www.bagley.org/~doug/shootout/ * with help from Markus Mottl *) let _ = let n = try int_of_string Sys.argv.(1) with Invalid_argument _ -> 1 and hash1 = Hashtbl.create 10000 in for i = 0 to 9999 do Hashtbl.add hash1 ("foo_" ^ string_of_int i) (ref i) done; let hash2 = Hashtbl.create 10000 in let update_hash2 k v = try let valref = Hashtbl.find hash2 k in valref := !valref + !v with Not_found -> Hashtbl.add hash2 k (ref !v) in for i = 1 to n do Hashtbl.iter update_hash2 hash1 done; Printf.printf "%d %d %d %d\n" !(Hashtbl.find hash1 "foo_1") !(Hashtbl.find hash1 "foo_9999") !(Hashtbl.find hash2 "foo_1") !(Hashtbl.find hash2 "foo_9999")