大家好,如何从循环中的if条件中收集数据
(defn update-f [a b]
(let[data(loop [i 0]
(when (< i (count a))
;;(println i)
(if (every? (set b) (nth (for [x a] (set (list x))) i))
(nth (for [x a] (conj x "new")) i)
(nth (for [x a] (conj x "old")) i))
(recur (inc i))))])); loop i will take this value
我可以打印数据来自if条件我需要从这个函数中获取数据
答案 0 :(得分:1)
您可以通过添加额外的“累加器”参数来循环收集数据:
(loop [i 0 acc []]
(if (< i 5)
(recur (inc i) (if (even? i)
(conj acc i)
acc))
acc))
然而,似乎你想要实现的目标可以写得更简洁(如果我得到了你想要的东西):
(defn are-new? [a b]
(map (fn[i] [i (if (b i) :new :old)]) a))
我们正在映射a
中的每个项目,以便为其添加:new
或:old
标记。集合也充当函数,当集合中存在参数时返回truthy值。因此,要查找某个项i
是否已设置为b
,我们只需执行(b i)
。
你可以测试一下:
(let [r (are-new? [[1 2 3] [2 3 4] [1 2]] #{[1 2 3] [1 2]})]
(doseq [i r]
(println i)))
> [[1 2 3] :new]
> [[2 3 4] :old]
> [[1 2] :new]