通过键选择矢量中的地图的惯用法

Pet*_*ete 3 clojure clojurescript

假设我有这个地图矢量:

[{:title "Title1" :id 18347125}
 {:title "Title2" :id 18347123}
 {:title "Title3" :id 18341121}]
Run Code Online (Sandbox Code Playgroud)

我希望选择地图:id 18347125,我该怎么做?

我试过了

(for [map maps
      :when (= (:id map) id)]
    map)
Run Code Online (Sandbox Code Playgroud)

这感觉有点难看,并返回一个长度为一的序列,我想只返回地图.

tno*_*oda 8

恕我直言,有几种方法可以解决你的问题,绝对惯用的方式是在品味领域.这是我的解决方案,我干脆翻译成"选择地图,其:id1834715"为Clojure的.

user> (def xs [{:title "Title1" :id 18347125}
               {:title "Title2" :id 18347123}
               {:title "Title3" :id 18341121}])
#'user/xs

user> (filter (comp #{18347125} :id) xs)
({:title "Title1", :id 18347125})
Run Code Online (Sandbox Code Playgroud)

:id关键字是查找自身传递给它一个集合中的功能.该集合#{18347125}也是一个函数,用于测试传递给它的值是否等于18347125.使用Clojure设置作为谓词函数允许简洁的习语.


Ant*_* R. 4

我不确定这是否是最简单的编写方式,但我认为这更清楚地表达了您的意图:

(->> maps
     (filter #(= (:id %) id))
     first)
Run Code Online (Sandbox Code Playgroud)