繁体   English   中英

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

[英]How to add a record to an existing map?

我有从运行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))))

现在,我已将结果集复制到另一张地图中。 有什么方法可以将另一个记录添加到此现有映射并将此新映射返回给另一个函数?

如果您使用另一个问题中未说明的query语法,则可以使用:row-fn操作结果集中的每个记录。 默认行是地图,因此,如果仅使用返回地图的函数(如本例中的select-keys ),则可以使用assoc向地图添加新的键值对。

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

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

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

尽管上面提到的assoc方法也可行,但我发现合并通常更有用和更灵活。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM