Jes*_*son 1 clojure clojurescript
我有一个地图矢量,其中我需要删除名称键的值是重复的地图,保持具有最高年龄值的地图.我有一个解决方案,但我认为它看起来不干净.有没有更好的方法来实现它而不将其分解为多个功能?
这是我的数据:
(def my-maps
[{:name "jess", :age 32}
{:name "ruxpin", :age 4}
{:name "jess", :age 35}
{:name "aero", :age 33}
{:name "banner", :age 4}])
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案:
(map first (vals (group-by :name (reverse (sort-by :name my-maps)))))
Run Code Online (Sandbox Code Playgroud)
结果:
({:name "ruxpin", :age 4} {:name "jess", :age 35} {:name "banner", :age 4} {:name "aero", :age 33})
Run Code Online (Sandbox Code Playgroud)
另一种方式是组合group-by和max-key.这种方法的优点是您不需要对集合进行排序sort,反过来又会对性能产生影响,如果可以避免,则应该这样做.
(for [[_ vs] (group-by :name my-maps)]
(apply max-key :age vs))
;;=> ({:name "jess", :age 35}
;; {:name "ruxpin", :age 4}
;; {:name "aero", :age 33}
;; {:name "banner", :age 4})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |