私の答えは mtyaka の答えと非常に似ていますが、私の意見では、これまでより少し短く、よりモジュール化されています。
(map (fn [& vs] (zipmap [:id :name :type] vs))
(id1 id2 id3 ...)
(name1 name2 name3 ...)
(type1 type2 type3 ...))
ここでzipmap
は、固定キー シーケンスと変数値シーケンスを使用してマップを作成しています。これは、「最初のステップ」では(id1 name1 type1)
、「2 番目のステップ」では(id2 name2 type2)
などになります。
これは、3 つの遅延シーケンスが互いに分離されている場合にのみ機能します。遅延シーケンスのシーケンス、つまり がある場合、次のように、この seq に対して上記を((id1 id2 ...) (name1 name2 ...) (type1 type2 ...))
実行する必要があります。apply
(apply map (fn [& vs] (zipmap [:id :name :type] vs))
((id1 id2 id3 ...)
(name1 name2 name3 ...)
(type1 type2 type3 ..)))
ここでは、遅延シーケンスのシーケンスの先頭にapply
コードを追加するだけで、それが評価される式になります。map (fn [& vs] (zipmap [:id :name :type] vs))
つまり、コードの最初のブロックとまったく同じ式になります。