On Thu, Mar 22, 2012 at 10:32 PM, Cedric Greevey <[email protected]> wrote:
(into #{} (remove #(= (:id %) foo) input-set))
> You could stop when :id foo got hit by using a loop/recur, and save half the
> iterations on average.
Clarification: stop comparing to match the :id key against the target.
You'd have to continue copying into the output, of course.
The map approach makes it easy via (dissoc the-map foo), as well as to
look up by id.
All of this also assumes that the :id numbers are unique. If they're
not, the map approach needs modifying, to e.g.
{:id 1 [{:id 1, :foo "bar"} {:id 1, :foo "baz"}], :id 2 [{:id 2, :foo "car"}]}
where each value is a bucket of potentially more than one object.
The removal algorithm likewise needs changing if the object is not to
remove ALL items with the target :id. If it's a specific item, you
need to find it in the bucket and remove it using a criterion beyond
the :id (and in the set case, just make the remove closure's test more
specific).
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en