如何将记录添加到现有地图?

时间:2015-05-27 05:07:33

标签: clojure

我有一个从运行SQL查询获得的地图。

(defn print-info
  [rs]
  (doseq [req rs]
    (let [rs1 req]
      (println "rs1" rs1))))

(defn display-info
  [uname]
  (sql/with-connection
     db 
     (sql/with-query-results rs
                             ["Select * from user"]
                             (print-info rs))))

现在我已将结果集复制到另一个地图中。有没有办法将另一条记录添加到现有地图并将此新地图返回给另一个函数?

2 个答案:

答案 0 :(得分:1)

如果您使用other question中解释的非弃用的query语法,则可以使用:row-fn来操作结果集中的每条记录。默认行是地图,因此如果您仅使用返回地图的函数(例如select-keys),则可以使用assoc向地图添加新的键值对。

(query db ["select * from user"]
          :row-fn #(assoc (select-keys % [:name]) :type :user))

答案 1 :(得分:0)

一般来说,当我想对记录进行修复时,我会使用 merge ,它会以从左到右的方向合并任意数量的地图。因此:

user=> (merge {:foo 1 :bar 2 :ban 3} {:bar 20} {:ban 300})
{:foo 1, :bar 20, :ban 300}

虽然上面提到的 assoc 方法也有效,但我发现 merge 通常更有用,更灵活。

这适用于表示为地图的任何内容,当然,不仅仅是记录!

另外,我强烈建议您使用[Korma | http://sqlkorma.com/]进行数据库查询。