簡體   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