Hi Ru, I hope I understood your question correctly, because I did some digging based on that, since I was curious about the answer.
** The implementation for sorted maps (at least in 1.5.1 and as far back as 1.2.0, maybe farther, I didn't check) guarantees that the result from from *keys* will return an ascending sorted seq of keys; *vals* will return a seq following the corresponding keys order. Having said that, the docstring for *keys* doesn't mention anything about the order of the elements in the sequence, so the order could considered as an implementation detail... on the other hand it hasn't changed in quite a while so if it were me I would consider it a feature, plus the documentation on sorted maps here<http://clojure.org/data_structures>, says: [...] seq<http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/seq>returns a sequence of map entries, which are key/value pairs. Sorted map > also supports > rseq<http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/rseq>, > > which returns the entries in reverse order. [...] Which implicitly suggests (at least for me) that *seq* returns the entries in order (since *rseq* returns the inverse, but *only* for sorted maps). Hope it helps --------- Digging details: *vals* is implemented in terms of* clojure.lang.RT.vals()<https://github.com/clojure/clojure/blob/clojure-1.5.1/src/jvm/clojure/lang/RT.java#L518> * (*keys* follows the same approach). There, the map is *seq*'ed and that is what is used in *APersistentMap.ValSeq*<https://github.com/clojure/clojure/blob/clojure-1.5.1/src/jvm/clojure/lang/APersistentMap.java#L164> 's (and *APersistentMap.KeySeq*<https://github.com/clojure/clojure/blob/clojure-1.5.1/src/jvm/clojure/lang/APersistentMap.java#L133> 's) implementation of *first* and *next* to return the values. The sequence of entries as a result from *(seq m)** *determines the order of the keys * and* values in the seqs returned from the functions. This means that if entries are sorted by their keys, then the corresponding values will follow the same order with vals,* *that is, they won't be necessarily ordered. The *seq* of a *sorted-map* is guaranteed to return entries ordered by *key*, based on the implementation of *entrySet()*<https://github.com/clojure/clojure/blob/clojure-1.5.1/src/jvm/clojure/lang/APersistentMap.java#L214> (from *APersitentMap*) and the *iterator()*<https://github.com/clojure/clojure/blob/clojure-1.5.1/src/jvm/clojure/lang/PersistentTreeMap.java#L204> and *NodeIterator*<https://github.com/clojure/clojure/blob/clojure-1.5.1/src/jvm/clojure/lang/PersistentTreeMap.java#L836>(from *PersistentTreeMap*, class with which sorted maps are implemented). Juan On Sunday, October 20, 2013 8:25:02 PM UTC+8, ru wrote: > > Dear clojure people! > > Do results of functions "keys" and "vals" ordered for sorted maps > accordingly? Does it guaranteed? > > Thanks in advance. > > Sincerely, > Ru > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.