If you want to boost performance a bit just memoize the conversion 
functions. Memoize makes you vurnable to exploits though, better use 
something with WeakRefs if you convert anything from untrusted sources (eg. 
guava CacheBuilder). But given your usecase this will probably be the 
biggest gain, no matter what else you use to convert maps.

https://gist.github.com/thheller/7ddc0371561deaf13e11
"Elapsed time: 35.488 msecs"

clojure.walk has keywordize-keys and stringify-keys, maybe a suitable 
starting point for your implementation.

HTH,
/thomas


On Tuesday, January 6, 2015 8:25:57 PM UTC+1, Noam Ben-Ari wrote:
>
> Hi,
>
> I've written a small library (1 ns, 100 lines) to transform nested maps 
> from "dash-case" keys to "camelCase" keys and back.
>
> The original use case was taking MySQL records that use camelCase field 
> names and convert them to dash-case so they don't stick out like a sore 
> thumb in my code. Similarly, when writing new records into the DB, I wanted 
> to camelize them back before passing to JDBC.
>
> It should work on an arbitrarily deep nested map without blowing the stack 
> (using zipper).
>
> It is symmetric:
>
> (dasherize "clientOSVersion")
> => "client-OS-version"
> (camelize "client-OS-version")
> => "clientOSVersion"
>
>
> The library starts with defining functions that work on strings, then ones 
> that work on keywords (internally calling the string ones) and later ones 
> working on maps (that assume all keys are keywords and use the keyword 
> functions). Lastly, the library defines protocols that will ease working 
> with different types.
>
> I would love any feedback, but especially:
> - is there any off-the-shelf library for this already?
> - I found zipper and regex to be really hurting performance here, anything 
> you would do differently to improve this?
> - anything about style... I'm writing Clojure for a year and didn't get 
> much code reviews.
>
> the gist is here:
>
> https://gist.github.com/NoamB/6e940775dfa63c73ee9c
>
> Thanks.
>
> PS - I took the string versions of the functions from cuerdas (
> https://github.com/funcool/cuerdas) and modified a bit, mainly to get the 
> symmetry working.
>

-- 
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/d/optout.

Reply via email to