|
4 | 4 |
|
5 | 5 | (meditations |
6 | 6 |
|
7 | | - "To split a collection categorized by keys use the group-by function." |
| 7 | + "To categorize a collection by some function, use group-by." |
8 | 8 | (= __ (group-by count ["hello" "world" "foo" "bar"])) |
9 | 9 |
|
10 | 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]]) |
| 11 | + "You can simulate filter + remove in one pass" |
| 12 | + (= (get-odds-and-evens [1 2 3 4 5]) |
| 13 | + ((partial (juxt filter remove) odd?) [1 2 3 4 5]) |
| 14 | + [[1 3 5] [2 4]]) |
14 | 15 |
|
15 | 16 | "You can also group by a primary key" |
16 | 17 | (= __ |
17 | 18 | (group-by :id [{:id 1 :name "Bob"} |
18 | | - {:id 2 :name "Mike"} |
19 | | - {:id 1 :last-name "Smith"} ])) |
| 19 | + {:id 2 :name "Mike"} |
| 20 | + {:id 1 :last-name "Smith"} ])) |
20 | 21 |
|
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}]} |
| 22 | + "But be careful when you group by non-required key" |
| 23 | + (= {"Bob" [{:name "Bob" :id 1}] |
| 24 | + "Mike" [{:name "Mike" :id 2}] |
| 25 | + __ [{:last-name "Smith" :id 1}]} |
23 | 26 | (group-by :name [{:id 1 :name "Bob"} |
24 | 27 | {:id 2 :name "Mike"} |
25 | 28 | {:id 1 :last-name "Smith"}])) |
26 | 29 |
|
27 | | - "The true power of group-by is using a custom function" |
| 30 | + "The true power of group-by comes with custom functions" |
28 | 31 | (= __ |
29 | | - (group-by #(if (:bad %) :nauty-list :nice-list) |
| 32 | + (group-by #(if (:bad %) :naughty-list :nice-list) |
30 | 33 | [{:name "Jimmy" :bad true} |
31 | 34 | {:name "Jack" :bad false} |
32 | 35 | {:name "Joe" :bad true}]))) |
0 commit comments