这类似于Clojure get map key by value
但是,有一点不同.如果像hm那样你会怎么做同样的事情
{1 ["bar" "choco"]}
Run Code Online (Sandbox Code Playgroud)
想法是获得1(键)第一个元素,如果值列表是"bar"?如果其他问题得到解答,请随时关闭/合并此问题.
我试过这样的东西,但它不起作用.
(def hm {:foo ["bar", "choco"]})
(keep #(when (= ((nth val 0) %) "bar")
(key %))
hm)
Run Code Online (Sandbox Code Playgroud)
您可以过滤地图并返回结果序列中第一个项目的第一个元素:
(ffirst (filter (fn [[k [v & _]]] (= "bar" v)) hm))
Run Code Online (Sandbox Code Playgroud)
您可以对矢量值进行解构以访问第二个和/或第三个元素,例如
(ffirst (filter (fn [[k [f s t & _]]] (= "choco" s))
{:foo ["bar", "choco"]}))
Run Code Online (Sandbox Code Playgroud)
通过前几个元素,您可能会发现它们nth更具可读性.
另一种方法是使用some:
(some (fn [[k [v & _]]] (when (= "bar" v) k)) hm)
Run Code Online (Sandbox Code Playgroud)
您的示例非常接近工作,并进行了一些小的更改:
(keep #(when (= (nth (val %) 0) "bar")
(key %))
hm)
Run Code Online (Sandbox Code Playgroud)
keep并且some类似,但some只返回一个结果.
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |