gpt4 book ai didi

clojure - 如何在 Clojure 中的嵌套映射中选择键?

转载 作者:行者123 更新时间:2023-12-02 18:32:53 25 4
gpt4 key购买 nike

假设我有一张这样的 map ( m ):

(def m {:a 1 :b 2 :c {:d 3 :e 4} :e { ... } ....})

我想创建一个仅包含 :a 的新 map , :b:d来自m ,即结果应该是:

{:a 1 :b 2 :d 3}

我知道我可以使用select-keys轻松获取:a:b :

(select-keys m [:a :b])

但是有什么好方法可以同时获得 :d ?我正在寻找这样的东西:

(select-keys* m [:a :b [:c :d]])

Clojure 中是否存在这样的函数或者推荐的方法是什么?

最佳答案

在纯 Clojure 中我会这样做:

(defn select-keys* [m paths]
(into {} (map (fn [p]
[(last p) (get-in m p)]))
paths))

(select-keys* m [[:a] [:b] [:c :d]]) ;;=> {:a 1, :b 2, :d 3}

我更喜欢保持路径的类型为常规,因此所有路径的键序列。在 clojure.spec 中,这将读作

(s/def ::nested-map (s/map-of keyword? 
(s/or :num number? :map ::nested-map)))
(s/def ::path (s/coll-of keyword?))
(s/fdef select-keys*
:args (s/cat :m ::nested-map
:paths (s/coll-of ::path)))

关于clojure - 如何在 Clojure 中的嵌套映射中选择键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38893968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com