我需要收集并将: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"]
我需要收集并将: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"]
这将产生的输出与输入,这是你想要的吗?
(defn f [[k1 _ k2 rels]]
[k1 k2
(clojure.string/join ", "
(map :c/name (apply concat (mapcat vals rels))))])
非常感谢,这是我想要的!但是,如果我想添加一些条件,在代码中改变了什么:[: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
是的,你可以过滤rels,像'(filter#(或(not(contains?:c/u%)(=(:c/u%)) “1”))rels)' –
谢谢你的解决方案!但是你可以用过滤器编写整个脚本,我有一些错误尝试在函数中使用这个过滤器 – Slava
这似乎是一个奇怪的数据输入格式。它来自哪里?你能否试图解决这个问题并告诉我们你试过了什么? –
这看起来像这个问题的另一个尝试:http://stackoverflow.com/questions/35878126/parse-vector-of-maps-in-clojure – jmargolisvt