2017-09-01 59 views
2

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

{"test-1" 23, 
"test-2" 456, 
"test-3" 23} 

如何找到具有价值23钥匙?

+0

您是否需要幽灵输入?它不是深层嵌套的结构。 –

+2

那么这也可能是一个简单的例子,虽然没有幽灵很容易做到这一点,但对许多微不足道的数据结构和幽灵来说也是如此。然而,问题本身是明确的,如果只缺少一些“我已经尝试”显示OP的优点。 – cfrick

回答

2

如果你想找到使用幽灵什么的,最好是用幽灵/选择

(use 'com.rpl.specter)  

(select [ALL #(= (second %) 23) FIRST] 
    {"test-1" 23, 
    "test-2" 456, 
    "test-3" 23}) 
+0

这正是我期待和期待的那种解决方案!比其他人更优雅。 – sumek

6

我认为你不需要幽灵来做到这一点,只是按价值过滤。即:

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

与幽灵一种解决方案是:

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

您实际上并不需要'seq',因为过滤器无论如何都会输入它的输入。 –

+0

是的,你是对的 –

相关问题