如何通过多个键对一组地图进行分组?
例如:
(def m1 [{:a 1 :b 2 :c 3}
{:a 1 :b 2 :c 4}
{:a 1 :b 4 :c 3}
{:a 1 :b 4 :c 3}])
(group-by-x [:a :b] m1)
Run Code Online (Sandbox Code Playgroud)
我想退掉这个:
[{:a 1 :b 2} [{:a 1 :b 2 :c 3}{:a 1 :b 2 :c 4}],
{:a 1 :b 4} [{:a 1 :b 4 :c 3}{:a 1 :b 4 :c 3}]]
Run Code Online (Sandbox Code Playgroud)
Mic*_*zyk 22
(group-by #(select-keys % [:a :b]) m1)
Run Code Online (Sandbox Code Playgroud)
这会返回一张地图:
{{:b 2, :a 1} [{:a 1, :c 3, :b 2} {:a 1, :c 4, :b 2}],
{:b 4, :a 1} [{:a 1, :c 3, :b 4} {:a 1, :c 3, :b 4}]}
Run Code Online (Sandbox Code Playgroud)
要准确获取您指定的返回值,请将其包装在(vec (apply concat ...)):
(vec (apply concat (group-by #(select-keys % [:a :b]) m1)))
; => as in the question text
Run Code Online (Sandbox Code Playgroud)
这是等价的,但可能更漂亮:
(->> (group-by #(select-keys % [:a :b]) m1)
(apply concat)
vec)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3230 次 |
| 最近记录: |