Hi!
If you'd like to use relational structures, take a look at
clojure.set. There's a couple of functions which let you do relational
algebra (project, select, rename, plus some other things like index).
Clojure represents relations as sets of maps:
(def data #{{:id 0 :name "Fred" :age 30}
{:id 1 :name "Wilma" :age 26}
{:id 2 :name "Bam-bam" :age 2}
{:id 3 :name "Dino" :age 3}})
(def age-index (clojure.set/index data [:age]))
(defn name-by-age [a]
(map :name (age-index {:age a})))
Kind regards,
Achim
Am 09.08.2009 um 08:27 schrieb Chad Harrington:
> Hi all,
> I am learning Clojure and would like to see if there is a better/
> more concise/faster/more idiomatic/etc. way to create the age-index
> below. My version seems awfully roundabout. The basic concept is a
> toy database table stored as a hashmap. Each row has a row-id and
> and a vector of data [name, age]. I then create an index on the age
> column. The index should yield a row-id for the given age value.
> My code below works as designed, but I'd like to see how the age-
> index could be improved.
>
> Thanks for your insights.
>
> Chad
> ------------ code begin ----------------
> (use '[clojure.contrib.seq-utils :only (flatten)])
>
> (def data {
> 0 ["Fred" 30],
> 1 ["Wilma" 26],
> 2 ["Bam-bam" 2],
> 3 ["Dino" 3]})
>
> (def age-index
> (apply sorted-map
> (flatten (map #(list
> (nth (val %) 1)
> (key %))
> data))))
>
> (defn name-by-age [age]
> (first (data (age-index age))))
>
> (println (name-by-age 26))
> ------------------ code end -------------------
>
> Chad Harrington
> [email protected]
>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---