1

ルックアップ テーブルとして使用されるマップの Clojure ベクトルがあります。

(def data 
  [{map1},{map2},...,{nth-map}])

ベクター内の各マップには、2 つのキーと値のペアが含まれています。

{: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ます。

1 つのキーワードのすべての値を含む単一のベクトルを作成できます。

user=> (vec (map :key1 data))      
["Value1" "Value2" ... "nth=Value"]

すべての内部ベクトルを含む外部ベクトルを作成するにはどうすればよいですか?

[[Value1-1 Value2-1][Value1-2 Value2-2]...[Value1-n Value2-n]]
4

2 に答える 2

5

マップのベクトルを「データ」として定義したと仮定します。

(into [] (map #(into [] (vals %)) data))
于 2013-04-19T11:27:54.717 に答える