我已经定义了这样的人
(def persons
'({:id 1 :name "olle"}
{:id 2 :name "anna"}
{:id 3 :name "isak"}
{:id 4 :name "beatrice"}))
我想在这里像这个命令的人那样映射元素
(map :id persons)
(1 2 3 4)
然而,术语:id将在括号内[:id]
。如何取消括号以便以
(map [:id] persons)
执行与
相同的操作(map :id persons)
此外,如果每列显示一个数字,其中:id为标题,那将是很好的。
答案 0 :(得分:2)
(def persons
'( {:id 1 :name "olle"}
{:id 2 :name "anna"}
{:id 3 :name "isak"}
{:id 4 :name "beatrice"}))
(mapv (first [:id]) persons) => [1 2 3 4]
答案 1 :(得分:1)
从评论中我假设您想要按顺序提取一些键。这可以通过juxt
来完成。 E.g:
user=> (map (juxt :id :name) persons)
([1 "olle"] [2 "anna"] [3 "isak"] [4 "beatrice"])
或者,如果你真的需要一个向量,请使用(apply juxt [:id :name])
答案 2 :(得分:0)
这是你想要的吗?
(defn map' [keys records]
(map #(select-keys % keys) records))
(map' [:id] persons);;=>({:id 1} {:id 2} {:id 3} {:id 4})
答案 3 :(得分:0)
您的意思是数据结构看起来像这个吗?
(def persons
'({[:id] 1 :name "olle"}
{[:id] 2 :name "anna"}
{[:id] 3 :name "isak"}
{[:id] 4 :name "beatrice"}))
如果是,此代码将解决问题:
user=> (mapv #(get % [:id]) persons)
[1 2 3 4]