File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 209209 5
210210 :hello
211211 (6 :these :are )
212- ]}]]
212+ ]}]
213+ [" 21_group_by" {" __" [odd?
214+ {5 [" hello" " world" ] 3 [" foo" " bar" ]}
215+ {1 [{:name " Bob" :id 1 }
216+ {:last-name " Smith" :id 1 }]
217+ 2 [{:name " Mike" :id 2 }]}
218+ nil
219+ {:nauty-list [{:name " Jimmy" :bad true }
220+ {:name " Joe" :bad true }]
221+ :nice-list [{:name " Jack" :bad false }]}]}]
222+ ]
Original file line number Diff line number Diff line change 1+ (defn get-odds-and-evens [coll]
2+ (let [{odds true evens false } (group-by __ coll)]
3+ [odds evens]))
4+
5+ (meditations
6+
7+ " To split a collection categorized by keys use the group-by function."
8+ (= __ (group-by count [" hello" " world" " foo" " bar" ]))
9+
10+
11+ " Sometimes you want to filter a sequence but also keep the predicate."
12+ (= (get-odds-and-evens '(1 2 3 4 5 ))
13+ [[1 3 5 ] [2 4 ]])
14+
15+ " You can also group by a primary key"
16+ (= __
17+ (group-by :id [{:id 1 :name " Bob" }
18+ {:id 2 :name " Mike" }
19+ {:id 1 :last-name " Smith" } ]))
20+
21+ " but be careful when you group by non primary key"
22+ (= {" Bob" [{:name " Bob" :id 1 }], " Mike" [{:name " Mike" :id 2 }], __ [{:last-name " Smith" :id 1 }]}
23+ (group-by :name [{:id 1 :name " Bob" }
24+ {:id 2 :name " Mike" }
25+ {:id 1 :last-name " Smith" }]))
26+
27+ " The true power of group-by is using a custom function"
28+ (= __
29+ (group-by #(if (:bad %) :nauty-list :nice-list )
30+ [{:name " Jimmy" :bad true }
31+ {:name " Jack" :bad false }
32+ {:name " Joe" :bad true }])))
You can’t perform that action at this time.
0 commit comments