Chr*_*evo 1 vector clojure map key-value
我有一个用作查找表的Clojure矢量图:
(def data
[{map1},{map2},...,{nth-map}])
Run Code Online (Sandbox Code Playgroud)
向量中的每个映射都包含两个键/值对:
{:key1 "Value1", :key2 "Value2"}
Run Code Online (Sandbox Code Playgroud)
所以整个结构看起来像这样:
(def data
[{:key1 "Value1-1", :key2 "Value2-1"}, ; map1
{:key1 "Value1-2", :key2 "Value2-2"}, ; map2
|
|
V
{:key1 "Value1-n", :key2 "Value2-n"}]) ; nth-map
Run Code Online (Sandbox Code Playgroud)
我想将其迁移到数据库表中.我已经有一个将值插入表行的函数.它需要一个向量,向量中的每个项目代表行中的一列:
(defn insert-row [column1-value column2-value]
(sql/with-connection (System/getenv "DATABASE_URL")
(sql/insert-values
:table ; table name
[:column1 :column2] ; table column names
[column1-value column2-value]))) ; values to be inserted into row
Run Code Online (Sandbox Code Playgroud)
我需要的是一个贯穿整个地图矢量的函数,对于每个地图,它创建一个只有该地图值的矢量:
[Value1 Value2]
Run Code Online (Sandbox Code Playgroud)
我想我可以使用现有的数据库函数insert-row作为参数map:
(map insert-row values-from-map)
Run Code Online (Sandbox Code Playgroud)
where values-from-map表示包含内部向量的外部向量(每个向量包含其各自的值),用于原始向量中的每个映射:
[[Value1-1 Value2-1]
[Value1-2 Value2-2]
[Value1-n Value2-n]]
Run Code Online (Sandbox Code Playgroud)
这将创建每个向量并将其传递给insert-values函数.
我可以创建一个包含一个关键字中所有值的向量:
user=> (vec (map :key1 data))
["Value1" "Value2" ... "nth=Value"]
Run Code Online (Sandbox Code Playgroud)
如何创建包含所有内部向量的外部向量?
[[Value1-1 Value2-1][Value1-2 Value2-2]...[Value1-n Value2-n]]
Run Code Online (Sandbox Code Playgroud)
user=> (vec (for [m data] ((juxt :key1 :key2) m)))
[["Value1-1" "Value2-1"] ["Value1-2" "Value2-2"]]
Run Code Online (Sandbox Code Playgroud)
假设您仍然将地图矢量定义为"数据":
(into [] (map #(into [] (vals %)) data))
Run Code Online (Sandbox Code Playgroud)