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)
这感觉有点难看,并返回一个长度为一的序列,我想只返回地图.
恕我直言,有几种方法可以解决你的问题,绝对惯用的方式是在品味领域.这是我的解决方案,我干脆翻译成"选择地图,其:id是1834715"为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设置作为谓词函数允许简洁的习语.
我不确定这是否是最简单的编写方式,但我认为这更清楚地表达了您的意图:
(->> maps
(filter #(= (:id %) id))
first)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |