我像这样做了联合
(defn process-pubaccess-nb [conn books]
(map #(assoc-in % [:book/publication :publication/access] (get-rules-ids % conn) ) books)
)
如果 get-rules-ids 返回nil,我想添加条件 assoc-in 。我试图添加when-let,但我有错误。
例如,如果我得到
(def lib [{:book/name "one" :book/pid "1" :book/publication {:publication/pid "11"} }
{:book/name "two" :book/pid "2":book/publication {:publication/pid "22"} }
{:book/name "three" :book/pid "3" }])
我想要
({:book/name "one", :book/pid "1", :book/publication {:publication/pid "11", :publication/access "test"}}
{:book/name "two", :book/pid "2", :book/publication {:publication/pid "22", :publication/access "test"}}
{:book/name "three", :book/pid "3"})
现在我没有条件
({:book/name "one", :book/pid "1", :book/publication {:publication/pid "11", :publication/access "test"}}
{:book/name "two", :book/pid "2", :book/publication {:publication/pid "22", :publication/access "test"}}
{:book/name "three", :book/pid "3", :book/publication {:publication/access nil}})
答案 0 :(得分:1)
执行此操作的一种方法是使用if-let。
(defn process-pubaccess-nb
[conn books]
(map #(if-let [access (get-rules-ids % conn)]
(assoc-in % [:book/publication :publication/access] access)
%)
books))
答案 1 :(得分:1)
Maxx的
Amar的解决方案有效,但不清楚调用get-rules-ids
与预过滤集合的成本。
以下是后代的过滤选项:
(defn process-pubaccess-nb
[conn books]
(map #(assoc-in % [:book/publication :publication/access] (get-rules-ids % conn))
(filter :book/publication books)))
另外,如果收集的尺寸可能相当大,那么换能器的性能可能会更高。