I have confronted a similar question in the past when deciding how to label
the dimensions of vectors and multidimensional arrays.

My tentative conclusion is that it's best to use raw vectors.

=> (def v [40 41 42])
#'user/v

If you need human-readable labels, build a separate index with constant
lookup.

=> (def vindex {:x 0 :y 1 :z 2})
#'user/vindex
=> (v (:z vindex))
42

You can put v and vindex in a single hashmap or class or type or whatever.

There are all kinds of reasons for this. The main one is that your data
proper remains in a pure array-like data structure and can easily be
processed by high-performance algorithms for things like array slicing and
transposition, not to mention mathematical routines. The fact that you're
putting human-readable names on your indices is just a convenience.

Moreover, every time you want to get a sequence of elements out of your
vector, you don't want to have to loop through the hashmap pulling the
elements out in the right order. Mathematical vectors are orderful things
and should be represented in an orderful data structure. Clojure vectors are
ordered. Hashmaps are unordered.

That's the conclusion I have come to, at any rate.

Garth

On Fri, Feb 12, 2010 at 10:36 PM, Hozumi <fat...@googlemail.com> wrote:

> Hi,all
> Although there is no right answer, vector seem to be preferred in many
> cases.
> Which do you prefer map or vector?
> Thanks!
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to