2016-03-10 116 views
-2

我需要收集并将:c/name的值以相同的方式转换为第一级的嵌套矢量。在clojure中转换嵌套的矢量地图

输入例:

[:a/name "name" :a/vals [{:b/val [{:c/name "one"}{:c/name "two"}]} 
         {:b/val [{:c/name "three"}]}]] 

输出:

[:a/name :a/vals "one, two, three"] 
+3

这似乎是一个奇怪的数据输入格式。它来自哪里?你能否试图解决这个问题并告诉我们你试过了什么? –

+0

这看起来像这个问题的另一个尝试:http://stackoverflow.com/questions/35878126/parse-vector-of-maps-in-clojure – jmargolisvt

回答

0

这将产生的输出与输入,这是你想要的吗?

(defn f [[k1 _ k2 rels]] 
    [k1 k2 
    (clojure.string/join ", " 
    (map :c/name (apply concat (mapcat vals rels))))]) 
+0

非常感谢,这是我想要的!但是,如果我想添加一些条件,在代码中改变了什么:[:a/name“name”:a/vals [{:b/val [{:c/name“one”:c/u“1”} { c/name“two”:c/u“2”}]} {:b/val [{:c/name“three”:c/u“1”}]}]]添加结果如果:c/u =“1”or:c/u is missing – Slava

+0

是的,你可以过滤rels,像'(filter#(或(not(contains?:c/u%)(=(:c/u%)) “1”))rels)' –

+0

谢谢你的解决方案!但是你可以用过滤器编写整个脚本,我有一些错误尝试在函数中使用这个过滤器 – Slava