2013-07-20 5 views
6

これは簡単だと確信していますが、私はidomatic clojureへの道のりにはほとんど疑問がありません。たぶん私は何かを見逃していたが、clojureの地図ページを見て、私は解決策を見つけられなかった。キーと値のベクトルを持つときにマップを作成する

2つのベクトル(値以外のキーの1つ)がどのように効率的に(キーワード!)キーから値へのマップを作成しますか?

キーと値は以下の通りです:

(:year :month :day) (core/split "2013-02-18" #"-") 

答えて

16

自然な解決策はzipmapを使用することです。それは実際にはかなり効率的である。このような小さなマップについては

(zipmap [:year :month :day] (clojure.string/split "2013-02-18" #"-")) 
;= {:day "18", :month "02", :year "2013"} 

。地図を大きくするには、zipmapには現在は使用していないトランジェントを使用することをお勧めします。 JIRAのチケットには、私のパッチが添付されています:CLJ-1005

もちろん、トランジェント対応のzipmapを独自のコードベースに含めて、clojure.coreのものよりも優先して使用するだけで十分です。これは、あなたが大きな地図を圧縮している場合には非常に重要なことです。

このコードは、zipmapのトランジェントを使用するパッチまたはClojureScriptコアライブラリからコピーできます。リリース1844以降のClojureScript sourceへのリンクです(この特定の関数はClojureで変更なしで使用できます)。

+0

お返事ありがとうございました。これまでのClojureは爆発的で、私はOOプログラミングのバイザーから解放されていると感じています... – Core

関連する問題