在 clojure 中,我希望能夠為串列中的每個地圖連接地圖中的所有欄位(帶有分隔符)。
對于以下結果,我希望能夠得到:
(def h '({:key1 "one" :key2 "descone"} {:key1 "two" :key2 "destwo"}))
我想要的結果:
({one,descone} {two,destwo})
我做了以下但我無法得到正確的結果
(def h '({:key1 "one" :key2"descone"} {:key1 "two" :key2"destwo"}))
(~@(apply interpose "," (map (juxt :key1 :key2) h))))
而我得到的是以下內容:
one,desconetwo,destwo
編輯
場景如下: 我們使用 jdbc 從 postgres 中獲取所有記錄。記錄回傳如下: ({:col1 "one" :col2 "descone"} {:col1 "two" :col2 "destwo"})。現在,我們需要用分隔符連接所有列,并將其作為主鍵并將其插入到 postgres 中的新表中。
uj5u.com熱心網友回復:
我假設您想回傳一個字串,因為您將逗號作為分隔符。我進一步假設當您說“所有欄位”時,您的意思是“每個鍵值對的所有值”,并且每個值都是一個字串。在這種情況下,以下內容將為您提供您想要的。
user> (str "(" (clojure.string/join " " (map #(str "{" (clojure.string/join "," (vals %)) "}") h)) ")")
"({one,descone} {two,destwo})"
user>
代碼所做的是首先獲取每個映射的值并用逗號分隔符將它們連接起來,然后用左大括號和右大括號括起來每個映射。然后它獲取每個這樣的字串并用空格字符連接它們,然后用一個打開和關閉的括號括起來整個結果。
編輯:將編輯與問題相匹配。
由于您要生成一個包含資料庫行的所有值的主鍵值,因此我假設您要回傳的是字串序列。其中每個字串是每個映射的所有值按特定順序的連接,帶有分隔符。假設這是正確的,這是一個修改后的答案。
user> (map #(str "{" (clojure.string/join "," ((juxt :key1 :key2) %)) "}") h)
("{one,descone}" "{two,destwo}")
user>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454582.html
上一篇:無一例外地限制用戶輸入
