在clojure中转换嵌套向量映射
我需要以相同的方式收集:c/name值并将其传输到嵌套向量的第一级 输入示例:在clojure中转换嵌套向量映射,clojure,Clojure,我需要以相同的方式收集:c/name值并将其传输到嵌套向量的第一级 输入示例: [: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]]
[: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或:c/u丢失,您可以过滤rel,类似于过滤还是不包含?:c/u%=:c/u%1再次感谢您的解决方案!但是你能用filter编写整个脚本吗,我在函数中使用这个filter时遇到了一些错误[k1 k2 clojure.string/join,map:c/name应用concat mapcat vals filter是否包含?%:c/u=:c/u%1 rels]prn f res和我在不进行筛选的情况下获取值[:a/name:a/vals一、二、三]因此..我希望只过滤:c/u=1的项目,因此结果应该如下:[:a/name:a/vals one,three]