ベクトルにおけるベクトルのシーケンスにキーを追加し、ハッシュマップに変換考える
[["foo" "bar" 2] ["biz" "baf" 3]]
を私は
[{:a "foo" :b "bar" :num 2} {:a "biz" :b "baf" :num 3}]?
が現実に私のベクトルが必要とするベクトルの数百を持っているのですかどのようにキーが追加され、ハッシュマップに変換されます。何leetwinski
ベクトルにおけるベクトルのシーケンスにキーを追加し、ハッシュマップに変換考える
[["foo" "bar" 2] ["biz" "baf" 3]]
を私は
[{:a "foo" :b "bar" :num 2} {:a "biz" :b "baf" :num 3}]?
が現実に私のベクトルが必要とするベクトルの数百を持っているのですかどのようにキーが追加され、ハッシュマップに変換されます。何leetwinski
は言った、または:
(def input [["foo" "bar" 2]["biz" "baf" 3]])
(mapv (fn [[a b num]]
{:a a
:b b
:num num}) input)
あなたが大量のデータを変換する必要がある場合、それは一度にメモリ内の全ベクトルを維持しますので、多分mapv
が最良の選択肢ではありません。普通のmap
は遅延セクションを作成します。そうしないとトランスデューサが良いかもしれません。
すごく、ありがと...メモリの側面は、心に留めておくのは間違いありません! – THX1137
私の場合は、リファクタリングが容易で読みやすいので、この変種はzipmapよりも優れていることがわかります – leetwinski
この方法はzipmapよりも優れていますが、22対220気づく。 –
一般解:読者のため
(defn vectors->maps
"takes a vector of vectors containing values and a vector of keys
and returns a vector of maps such that each value at index n in the value
vector is paired with each key at index n in the keys vector
ex: (vectors->maps [["foo" "bar" 2] ["biz" "baf" 3]], [:a :b :num])
=> [{:a "foo", :b "bar", :num 2} {:a "biz", :b "baf", :num 3}]"
[vectors keys]
(mapv (partial zipmap keys) vectors))
演習:この機能のためのスペックを書いて、それは任意のエッジケース
を探し出すためにのためにテストを生成する。このような何か: '(mapv(部分zipmap [:a:b:num])["" foo "" bar "2" ["biz" "baf" 3]]) – leetwinski
このおかげで...トリックをやった! 私はこれを答えとして受け入れましたが、私はできるとは思わないとコメントしています。 – THX1137