【问题标题】:Clojure Specter: how to find map keys that have specific value?Clojure Spectre:如何找到具有特定值的映射键?
【发布时间】:2017-09-01 09:51:42
【问题描述】:

例如在地图中:

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

如何找到值23的键?

【问题讨论】:

  • 该输入是否需要幽灵?它不是深度嵌套的结构。
  • 好吧,这也可以是一个琐碎的例子,虽然没有幽灵很容易做到这一点,但对于许多琐碎的数据结构与幽灵来说也是如此。然而,问题本身是明确的,如果只是缺少一些“我已经尝试过”来自 OP 的努力。

标签: clojure specter


【解决方案1】:

如果你想用 Spectre 找东西,最好使用 specter/select

(use 'com.rpl.specter)    

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

【讨论】:

  • 这正是我所期待和希望的解决方案!比其他人优雅得多。
【解决方案2】:

我认为您不需要幽灵来执行此操作,只需按值过滤即可。即:

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

使用 Spectre 的解决方案是:

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

【讨论】:

  • 您实际上也不需要seq,因为过滤器无论如何都会对其输入进行排序。
猜你喜欢
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多