Clojure初学者在这里..
如果我有一组地图,例如
(def kids #{{:name "Noah" :age 5}
{:name "George":age 3}
{:name "Reagan" :age 1.5}})
Run Code Online (Sandbox Code Playgroud)
我知道我可以得到这样的名字
(map :name kids)
Run Code Online (Sandbox Code Playgroud)
1)如何选择特定地图?例如,我想找回name ="Reagan"的地图.
{:name "Reagan" :age 1.5}
Run Code Online (Sandbox Code Playgroud)
可以使用过滤器完成吗?
2)如果返回年龄= 3的名字怎么样?
是的,你可以这样做filter
:
(filter #(= (:name %) "Reagan") kids)
(filter #(= (:age %) 3) kids)
Run Code Online (Sandbox Code Playgroud)
有clojure.set/select
:
(clojure.set/select set-of-maps #(-> % :age (= 3)))
Run Code Online (Sandbox Code Playgroud)
而同样有name
和"Reagan"
.在这种情况下,返回值将是一个集合.
您也可以在filter
没有任何特殊准备的情况下使用,因为filter
调用seq
它的集合参数(编辑:正如我在输入时已经由ffriend描述的那样):
(filter #(-> % :age (= 3))) set-of-maps)
Run Code Online (Sandbox Code Playgroud)
这里的返回值将是一个懒惰的seq.
如果你知道在集合中只有一个项目满足你的谓词,那么some
效率会更高(因为它在找到匹配后不会处理任何其他元素):
(some #(if (-> % :age (= 3)) %) set-of-maps)
Run Code Online (Sandbox Code Playgroud)
这里的返回值将是匹配元素.
归档时间: |
|
查看次数: |
425 次 |
最近记录: |