From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id TAA09735; Tue, 18 Feb 2003 19:13:25 +0100 (MET) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id TAA09785 for ; Tue, 18 Feb 2003 19:13:20 +0100 (MET) Received: from nitro.isi.edu (nitro.isi.edu [128.9.208.207]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h1IIDJP10006 for ; Tue, 18 Feb 2003 19:13:19 +0100 (MET) Received: from moussor.isi.edu (moussor.isi.edu [128.9.208.41]) by nitro.isi.edu (8.11.6/8.11.2) with ESMTP id h1IIDIG19247; Tue, 18 Feb 2003 10:13:18 -0800 (PST) Received: from localhost (hdaume@localhost) by moussor.isi.edu (8.8.7/8.8.6) with ESMTP id SAA07718; Tue, 18 Feb 2003 18:13:17 GMT X-Authentication-Warning: moussor.isi.edu: hdaume owned process doing -bs Date: Tue, 18 Feb 2003 10:13:17 -0800 (PST) From: Hal Daume III To: Oliver Bandel cc: caml-list@inria.fr Subject: Re: [Caml-list] Hashtbl.keys In-Reply-To: <20030218180341.GA267@first.in-berlin.de> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk I actually find the OCaml hash table implementation to be very lacking and have thus written my own, which probably isn't as efficient. Nevertheless you can find it at http://www.isi.edu/~hdaume/hashtable.ml. It requires garray.ml(i) found at the same location. It doesn't have a keys function, but such a thing is easy to write: > let get_keys = fold (fun l k _ -> k :: l) [] You could probably do it marginally more efficiently by looking at the actual implementaiton. The reason I wrote this not-incredibly hash table implementation is essentially because I needed a map function for hash tables and there was no way to implement that on top of the current HashTbl interface. I would be more than happy to go back to the standard interface if it supported maps. -- Hal Daume III "Computer science is no more about computers | hdaume@isi.edu than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume On Tue, 18 Feb 2003, Oliver Bandel wrote: > Hello, > > the Hastbl-module is a fine thing. To have functions like > Hastbl.find_all is convenient for a lot of problems, which would > be not so easy to solve, when only hastbl.find would be in > that library. > > Well... and Hashtbl.iter seems to work on *all* antries in the > *whole* hash-table, that is: A Hastbl.find_all for each of the > keys in that table. > At least it is, how I understand the decription in the manual. > > Well, but Hashtbl.iter is used for unit-functions. > But I need bool-functions, and maybe other tyopes > too. > > So, if I want to apply a function with return-type different then > unit, I have to use a second Hash-table to remember, which > keys I have inside my main hastbl (using hashtbl.replace). > > Or I may have to use Hastbl.replace instead of Hastbl.add > in my main Hashtbl, where my new data-entry is a list of > the old entry with the new entry appended. > > But that all would be easier, if there would be a function > Hashtbl.keys, which give back all keys of a hashtbl. > > > So, Hashtbl.keys would have the following type: > > ('a, 'b) t -> key 'a list > > > With that function, I could use things like > > ################################################## > let myhash = Hashtbl.create 100000;; > > Hashtbl.add myhash "k1" "hellO";; > Hashtbl.add myhash "k2" "xxx";; > Hashtbl.add myhash "k3" "iuzwiuezriuw";; > > Hashtbl.add myhash "k1" "la la la";; > Hashtbl.add myhash "k1" "shoo bi doo";; > > Hashtbl.find_all (Hashtbl.keys myhash) > > (* > But the later function could also be named > Hashtbl.values > and this one may makes sense in the Hashtbl-module > too, but a Hashtbl.keys would be much more necessary! > > let all_values_of_a_hash hash = Hashtbl.find_all(Hashtbl.keys hash) > > But I think, the implementation could be more efficient, when > doing the latter function directly in the underwood of the > Hashtbl-module itself. > > *) > ################################################## > > > Wouldn't it a good idea to add such a > function "get all keys of a hashtable" > into the hashtbl-module? (And a "get all values..." to?) > > Would that be hard work, or can it be added easily? > > > What workaround makes sense until such a funtion will > be available? > Should I use a second hash to save all keys > of the main-hash? > Or what is a good way to solve this problem? > > > Ciao, > Oliver > > > P.S.: For a possible Ocaml-advocacy discussion I want to drop > that note here: > > I can't believe that programming such problems in perl > should be easier than in Ocaml... in perl there is a function > "keys" as well as a function "values" for working on hash-tables. > > > ------------------- > To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr > Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners