The sorted-vec is ~4 times faster than Clojure's sort (on my humble old machine):
user=> (def v (vec (take 10000 (repeatedly #(rand-int 100000))))) #'user/v user=> (time(dotimes [_ 1000] (sort v))) "Elapsed time: 23945.682336 msecs" nil user=> (time(dotimes [_ 1000] (sorted-vec v))) "Elapsed time: 6030.585433 msecs" BTW we have state here (the native Java array). Is it thread safe ? On Jan 2, 11:04 pm, Meikel Brandmeyer <m...@kotka.de> wrote: > Hi, > > Am 02.01.2010 um 20:17 schrieb ianp: > > >> A bit uglier, but ought to be quite fast. > > > Doesn't need to be that ugly, this looks OK to me at least: > > > (defn sorted-vec [coll] > > (doto (into-array coll) > > (java.util.Arrays/sort) > > (vec))) > > > It'd also be possible to generalise the return type by passing in a fn > > to apply to the sorted array. > > Unfortunately the above code does not work, because it returns the array and > not the vector. > > (defn sorted-vec > [coll] > (let [arr (into-array coll)] > (java.util.Array/sort arr) > (vec arr))) > > How fast is vec on an array? Isn't there a LazilyPersistentVector which just > wraps the array? > > Sincerely > Meikel -- 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