Version française
Home     About     Download     Resources     Contact us    
Browse thread
Getting an element of a hashtable: simple ... or is it?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Peng Zang <peng.zang@g...>
Subject: Re: [Caml-list] Getting an element of a hashtable: simple ... or is it?
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I think this is pretty standard.  At least, I see it in ExtLib and I do it on 
a regular basis.  In fact I have a function to do this for me so I don't have 
to do it over and over again.  Eg.

  let get_one ht = mkGetOne Hashtbl.iter ht

Peng

On Tuesday 05 August 2008 08:05:46 am Brighten Godfrey wrote:
> Hi,
>
> Suppose you are given a data structure, and you want to retrive one
> element -- any one element.  Sounds simple... and it is, if you have
> a list (List.hd list) or an array (arr.(0)).  But how about a
> hashtable, if we don't know a priori any of the keys in the hashtable?
>
> The best way I've thought of so far is to begin iterating through all
> the hashtable's elements, but then break out with an exception:
>
> exception Done
> let get_one ht =
>      let el = ref None in
>      (try (
>          Hashtbl.iter (fun i _ ->
>              el := Some i;
>              raise Done)
>              ht;
>          )
>      with Done -> ());
>      match !el with
>          None -> raise Not_found
>
>          | Some x -> x
>
> But this seems clumsy.  Any better ideas?
>
> Thanks,
> Brighten Godfrey
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.7 (GNU/Linux)

iD8DBQFImFPifIRcEFL/JewRAreVAKCOxjyr8uXNIOknO4zmL+i0La4RCQCcDLV1
OXN2V4ZiS8oxC5hQOf5phYU=
=ZXwI
-----END PGP SIGNATURE-----