我有一个 Clojure 映射向量用作查找表:
(def data
[{map1},{map2},...,{nth-map}])
向量中的每个映射都包含两个键/值对:
{:key1 "Value1", :key2 "Value2"}
所以整个结构看起来是这样的:
(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
我想将其迁移到数据库表中。我已经有一个将值插入表行的函数。它需要一个向量,向量中的每个项目代表行中的一列:
(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
我需要的是一个函数,它遍历整个地图向量,并为每个地图创建一个仅包含该地图值的向量:
[Value1 Value2]
我想我可以使用我现有的数据库函数insert-row
作为参数map
:
(map insert-row values-from-map)
其中values-from-map
表示包含原始向量中每个映射的内部向量(每个都包含其各自的值)的外部向量:
[[Value1-1 Value2-1]
[Value1-2 Value2-2]
[Value1-n Value2-n]]
这将获取创建的每个向量并将其传递给insert-values
函数。
我可以创建一个包含一个关键字的所有值的向量:
user=> (vec (map :key1 data))
["Value1" "Value2" ... "nth=Value"]
如何创建包含所有内部向量的外部向量?
[[Value1-1 Value2-1][Value1-2 Value2-2]...[Value1-n Value2-n]]