2

私がそうする場合、どの機能を使用できますか:

(the-function :a [1 2 3 4 5])

私は得る: [{:a 1} {:a 2} {:a 3} {:a 4} {:a 5}]

回答ありがとうございます。

4

2 に答える 2

6

これを表現するにはいくつかの方法があります。

user> (defn the-function [key vals] (map hash-map (repeat key) vals)) 
#'user/the-function    
user> (the-function :a [1 2 3 4 5])      
({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})  

また

user> (defn the-function [key vals] (map (partial hash-map key)  vals))
#'user/the-function
user> (the-function :a [1 2 3 4 5])
({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})

またはマップの代わりに for を使用する:

user> (defn the-function [key vals] (for [val vals] {key val}))
#'user/the-function
user> (the-function :a [1 2 3 4 5])
({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})

これらはシーケンスを返します。ベクトルにする必要がある場合は、それらを呼び出しでラップするvecか、mapv を使用できます。

user> (defn the-function [key vals] (mapv (partial hash-map key)  vals))
#'user/the-function
user> (the-function :a [1 2 3 4 5])
[{:a 1} {:a 2} {:a 3} {:a 4} {:a 5}]
user> (the-function :a `(1 2 3 4 5))
[{:a 1} {:a 2} {:a 3} {:a 4} {:a 5}] 
于 2013-05-08T02:16:24.917 に答える
3

これは、マップを使用するだけで実行できます。

(map (fn [v] {:a v}) [1 2 3 4 5]) ;; ({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})

これはあなたが探しているものですか?

もちろん、このロジックを関数にラップすることもできます-十分に頻繁に使用する場合。

于 2013-05-08T01:34:50.207 に答える