-
Notifications
You must be signed in to change notification settings - Fork 67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Suggested addition: index-and-map-by #50
Comments
Why not just use |
What can I say, the main reason is frequency :) . This pattern occurs so often in my code that I will eventually add this utility function anyway. Another reason might be performance of course, doing one scan and indexing instead of two, though I concede that's less problematic in general.
No, because in |
Right. So (index-and-map-by :id :name coll)
(into {} (map (juxt :id :name)) coll)
(->> coll (index-by :id) (map-vals :name)) To my eyes the last one is the clearest in terms of intent, though likely also the least performant. I'll need to think about this one for a while. |
Maybe |
(defn index-and-hof-by
[hof kf vf coll]
(into {}
(f
(fn [x]
[(kf x) (vf x)]))
coll)) |
@borkdude arguable, at this point you're just looking for I'm really only asking for a narrow but common use case. |
@weavejester I would argue that maybe characters count is not the best proxy for clarity in this case? Even if If we agreed that this pattern is frequent enough that the reader finds it worth memorizing by the |
I personally don't find enough use for the function to be worth memorizing, so I'd find |
@weavejester your call, there's no arguing against personal judgement. I guess I'll keep writing this function on every project :) thanks for considering it! |
Give me some time to think about it. There may also be performance improvements, or another way to write it. I'll leave this issue open. |
If that helps, the way I would write it for performance is: (defn index-and-map-by
[kf vf coll]
(persistent!
(reduce
(fn [tm x]
(let [k (kf x)
v (vf x)]
(assoc! tm k v)))
(transient {})
coll))) |
Wondering if you'd be open to a function
index-and-map-by
generalizing overindex-by
like the following:(Of course, you might want to improve the peformance of this implementation, e.g with
reduce
and transients).(index-and-map-by kf vf coll)
would be equivalent to(->> coll (index-by kf) (map-vals vf))
I'm asking because I keep defining this
index-and-map-by
function in my projects.The text was updated successfully, but these errors were encountered: