我有一个定义:
(def class1 {:people ({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})
Run Code Online (Sandbox Code Playgroud)
我想要的结果是一个看起来像的矢量
[["John" "25"]
["Harry" "23"]
["Peter" "24"]]
Run Code Online (Sandbox Code Playgroud)
如果我打电话(map (-> class1 :people) [:name :age])
然后我得到结果("彼得""24").为什么我只从最后一个hashmap而不是其他hashmap获取值?
如果我然后打电话(into [] (map (-> class1 :people) [:name :age]))
然后我得到结果["彼得""24"]
我需要做的是into在另外两个哈希映射上再次运行该函数,然后将3个结果放入向量中,但我不知道如何做到这一点.
我的问题是,当我运行时(map (-> class1 :people) [:name :age]),我得到最后一个哈希图.我相信你必须做一些事情,比如在每个哈希映射上运行一个函数,一次一个,然后每次将该向量放到另一个向量中以获得我正在寻找的表单.
任何帮助将非常感激
(def class1 {:people ({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})
Run Code Online (Sandbox Code Playgroud)
定义class1为地图:
{:people {:name "Peter" :age "24"}}
Run Code Online (Sandbox Code Playgroud)
因为形式的列表,(a b c)评估a b和c反过来评估之前c.如果您希望地图包含引用它的所有地图:
(def class1 {:people '({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})
Run Code Online (Sandbox Code Playgroud)
要从此地图中提取所需的值,您可以使用:
(mapv (juxt :name :age) (:people class1))
Run Code Online (Sandbox Code Playgroud)