Clojure - 如果值为真,则创建一个键数组
Clojure - Create an array of keys if value is true
我是 clojure 的新手。
我有一个 JSON 像:{ "1": true, "2": false, "3": true, "4": false }
我想创建一个在 clojure 中值为 true 的键数组。在此示例中,数组应为 ["1", "3"]
.
请帮帮我。任何帮助将不胜感激。
如果您的地图是 a
,则 (->> (filter (fn [[k v]] v) a) (map (fn [[k v]] k)))
之类的地图会起作用。你不能只用一张地图来做,因为你需要删除某些值,所以需要一些减少或过滤。
如果您愿意使用向量而不是数组(因为无论如何您通常在 Clojure 中使用向量),您可以执行类似的操作。
(defn keys-for-truthy-vals [m]
(->> m (filter val) (mapv key)))
注意 mapv
只是地图调用 returns 一个向量。如果您想要 seq
,只需使用 map
。
还有几个简短的片段:
user> (filter m (keys m))
;;=> ("1" "3")
user> (keep (fn [[k v]] (when v k)) m)
;;=> ("1" "3")
user> (for [[k v] m :when v] k)
;;=> ("1" "3")
内置函数in the Tupelo library为此:
(submap-by-vals map-arg keep-vals & opts)
Returns a new map containing entries with the specified vals. Throws for missing vals,
unless `:missing-ok` is specified. Usage:
(submap-by-vals {:a 1 :b 2 :A 1} #{1 } ) => {:a 1 :A 1}
(submap-by-vals {:a 1 :b 2 :A 1} #{1 9} :missing-ok ) => {:a 1 :A 1}
然后您可以在生成的地图上使用 keys
函数。
也许是这个?
(->> foo (filter second) keys)
其中 foo 是一张地图。
和已经提供的一样,只是停留在地图上。
(keys (filter val m))
我是 clojure 的新手。
我有一个 JSON 像:{ "1": true, "2": false, "3": true, "4": false }
我想创建一个在 clojure 中值为 true 的键数组。在此示例中,数组应为 ["1", "3"]
.
请帮帮我。任何帮助将不胜感激。
如果您的地图是 a
,则 (->> (filter (fn [[k v]] v) a) (map (fn [[k v]] k)))
之类的地图会起作用。你不能只用一张地图来做,因为你需要删除某些值,所以需要一些减少或过滤。
如果您愿意使用向量而不是数组(因为无论如何您通常在 Clojure 中使用向量),您可以执行类似的操作。
(defn keys-for-truthy-vals [m]
(->> m (filter val) (mapv key)))
注意 mapv
只是地图调用 returns 一个向量。如果您想要 seq
,只需使用 map
。
还有几个简短的片段:
user> (filter m (keys m))
;;=> ("1" "3")
user> (keep (fn [[k v]] (when v k)) m)
;;=> ("1" "3")
user> (for [[k v] m :when v] k)
;;=> ("1" "3")
内置函数in the Tupelo library为此:
(submap-by-vals map-arg keep-vals & opts)
Returns a new map containing entries with the specified vals. Throws for missing vals,
unless `:missing-ok` is specified. Usage:
(submap-by-vals {:a 1 :b 2 :A 1} #{1 } ) => {:a 1 :A 1}
(submap-by-vals {:a 1 :b 2 :A 1} #{1 9} :missing-ok ) => {:a 1 :A 1}
然后您可以在生成的地图上使用 keys
函数。
也许是这个?
(->> foo (filter second) keys)
其中 foo 是一张地图。
和已经提供的一样,只是停留在地图上。
(keys (filter val m))