Clojure幽灵:如何找到具有特定价值的地图键?

sum*_*mek 3 clojure specter

例如在地图中:

{"test-1" 23,
 "test-2" 456,
 "test-3" 23}
Run Code Online (Sandbox Code Playgroud)

如何找到有价值的钥匙23

Min*_*yen 6

我认为你不需要幽灵去做,只是按值过滤.即:

(->> {:key-1 10
      :key-2 20
      :key-3 10}
      (filter (fn [[k v]] (= v 10)))
      (map first))
==>  [:key-1 :key-3]
Run Code Online (Sandbox Code Playgroud)

Spectre的解决方案是:

(keys (specter/setval [specter/MAP-VALS #(not= 10 %)]
                       specter/NONE
                       {:key-1 10
                        :key-2 20
                        :key-3 10}))
Run Code Online (Sandbox Code Playgroud)


ale*_*hov 5

如果您想使用 Spectre 查找某些内容,最好使用Spectre/select

(use 'com.rpl.specter)    

(select [ALL #(= (second %) 23) FIRST]
  {"test-1" 23,
   "test-2" 456,
   "test-3" 23})
Run Code Online (Sandbox Code Playgroud)