我的数据结构如下:
(def data {:node {:subnode 'a}, :node2 {:subnode2 'b, :subnode3 'c} })
我想生成顶部节点(键)的值列表,即子节点(val),如下所示:
(:subnode 'a, :subnode2 'b, :subnode3 'c)
我该怎么做?几乎我迄今为止尝试过的所有东西都产生了:
({:subnode 'a} {:subnode2 'b, :subnode3 'c})
所有值都是分开的。
答案 0 :(得分:2)
您只需提取每个顶级地图的值,然后提取flatten
它:
(flatten (mapcat second data))
另外,为避免flatten
进行深度肥胖(如Leon Grapenthin所述),您可以使用jmargolisvt提供的解决方案或使用concat
:
(apply concat (mapcat second data))
答案 1 :(得分:2)
如果conj
map
发送到user=> data
{:node {:subnode a}, :node2 {:subnode2 b, :subnode3 c}}
user=> (apply conj (map val data))
{:subnode a, :subnode2 b, :subnode3 c}
,您可以在一张地图中获取所有内容:
StreamingBody
答案 2 :(得分:0)
库函数vals
用于收集所有地图的val,merge
用于合并地图:
user> data
{:node {:subnode a}, :node2 {:subnode2 b, :subnode3 c}}
user> (apply merge (vals data))
{:subnode a, :subnode2 b, :subnode3 c}