What you are attempting to do is sometimes called "bashing a transient in place". See these links for some discussion and examples:
http://clojuredocs.org/clojure_core/clojure.core/assoc! http://clojuredocs.org/clojure_core/clojure.core/dissoc! Andy On Sat, May 11, 2013 at 3:51 PM, Wojciech Winogrodzki < wwinogrod...@gmail.com> wrote: > Clojure 1.5.1. > > I'm trying to reorder a map. The keys in the map are known beforehand and > their order is undefined. So, I'm taking this map and construct a new > transient map with the keys ordered as I need them: > > defn reorder-map [] > (let [ > m {:j 10 :g 7 :b 2 :d 4 :e 5 :h 8 :i 9 :f 6 :c 3 :a 1 } > kwds [:a :b :c :d :e :f :g :h :i :j] > temp (transient {}) > ] > (doseq [k kwds] > (assoc! temp k (m k))) > (persistent! temp))) > > It returns {:a 1, :b 2, :c 3, :d 4, :e 5, :f 6, :g 7, :h 8}. The order is > as I have defined, but there are *only 8 out of 10 items* in the new map. > > If I do the same with an atom, all items are taken into account, but the > order is not as expected: > > (defn reorder-map-2 [] > (let [ > a (atom {}) > m {:j 10 :g 7 :b 2 :d 4 :e 5 :h 8 :i 9 :f 6 :c 3 :a 1 } > kwds [:a :b :c :d :e :f :g :h :i :j] > ] > (doseq [k kwds] > (swap! a assoc k (m k))) > @a)) > > It returns {:a 1, :c 3, :b 2, :f 6, :g 7, :d 4, :e 5, :j 10, :i 9, :h 8} > > I don't know the internals to judge in which order items are associated in > a map. It seems that normal association prepends; transient association > appends; atom association does not obey any particular order. > > Anyway,* it seems to be a bug in that the transient didn't accept more > than 8 items*. It should, I suppose. > > Or am I doing sth. very wrong? > > Thank you - > > > > > > > -- > -- > 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. > > > -- -- 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.