(let [items [{:id 1 :name "primary"} {:id 2 :name "secondary" :parent {:id 1}} {:id 3 :name "secondary" :parent {:id 1}} {:id 4 :name "also primary"}]] (group-by #(:id (or (:parent %) %)) items)) ;=> {1 [{:id 1, :name "primary"} ; {:id 2, :name "secondary", :parent {:id 1}} ; {:id 3, :name "secondary", :parent {:id 1}}], ; 4 [{:id 4, :name "also primary"}]}
clojure.core, by purposeClojure String utilities It is poor form to (:use clojure.string).
This file defines a generic tree walker for Clojure data structures.
This file defines polymorphic I/O utility functions for Clojure.