2017-07-18 5 views
1

私はClojureが新しく、ベクトル/リストを動的に作成したいと思います。私は同じように、mapを返すこの機能generate-map構築しました動的なベクトル/リストの作成

:この他の機能get-statement

{:key 1, :value 1, :other [...]} 

を、私はこのgenerate-map関数を呼び出すdoseqを持っています。

(defn get-statement 
    [st] 
    (doseq [s st] (generate-map s))) 

私は例えば、doseqコールを介して、これらすべてのgenerate-mapsリターンを結ぶ1つのマップを構築したいと思います。:

[{:key 1, :value 1, :other [...]} 
{:key 2, :value 2, :other [...]} 
{:key 3, :value 3, :other [...]}] 

私はそれをどのように行うことができますか?ありがとう!

+0

1.結果を必要とするので、 'doseq'を使用しないでください。 'for'を使用してください。 2. 'into'関数を探します。 '({}に)'。私は答えを掲示したいと思いますが、私は時計の上にいます:/ – Carcigenicate

+0

3.作成したい結果は違法に見えます。マップはキーと値のペアである必要があります。あなたは地図のベクトルが欲しいということを意味しましたか? – Carcigenicate

+0

ありがとう!それは働いた:) – isamendonca

答えて

4

あなたには、いくつかのマップを作成し、ベクターに入れて、ちょうどforを使用し、vecまたは(into [] ...)のいずれかと混合する場合:

(into [] ; ... and place them in a vector 
    (for [d data] ; ...for each datum in data... 
    (generate-map d))) ; Generate a map... 

またはmapv

(mapv generate-map data) ; Super succinct! 

絶対に使用しないでくださいこのようなもののためにdoseqdoseqは何も返さないので、​​やその他のエフェクトを使用して実際にループから何かを得る必要があります。

  • doseqは、副作用を実行する必要がある場合に使用し、直接結果は必要ありません。

  • ループ後に結果が必要な場合は、for,mapreduce(またはその他の機能的なループ構造)を使用してください。