It may be more to do with the difference between `for` and `map`. How do these versions compare in your benchmark:
(defn read-to-maps-partial [rows]
(let [headers (->>
rows
first
(take-while (complement #{""}))
(map keyword))]
(map (partial zipmap headers) (rest rows))))
(defn read-to-maps-fn [rows]
(let [headers (->>
rows
first
(take-while (complement #{""}))
(map keyword))
mapper (fn [row] (zipmap headers row))]
(map mapper (rest rows))))
Sean
On Oct 10, 2014, at 11:42 AM, Michael Blume <[email protected]> wrote:
> So I'm reading a bunch of rows from a huge csv file and marshalling those
> rows into maps using the first row as keys. I wrote the function two ways:
> https://gist.github.com/MichaelBlume/c67d22df0ff9c225d956 and the version
> with eval is twice as fast and I'm kind of curious about why. Presumably the
> eval'd function still implicitly contains a list of keys, it's still
> implicitly treating each row as a seq and walking it, so I'm wondering what
> the seq-destructuring and the map literal are doing under the hood that's
> faster.
signature.asc
Description: Message signed with OpenPGP using GPGMail
