連結された文字列のリストにclojureの2つのリストをジップする

2つのリストをzip-mappingする代わりに、

(zipmap ["a","b","c"] ["c","d","e"]) = {"c" "e", "b" "d", "a" "c"} 

最初のリストの最初の要素を2番目のリストの最初の要素に連結するなどして取得します。

("ce","bd","ac") 

逆の順序でもよい。

6

1 答え

これは map で行うことができます。 map は複数のコレクションを取ることができます。各コレクションから次の要素を取り出し、最初の引数として渡された関数に渡します。したがって、n個の引数とn個のコレクションをとる関数を渡すことができます。

表現

(map str ["a" "b" "c"] ["c" "d" "e"])

"a"と "c"、次に "b"と "d"、次に "c"と "e"で str を呼び出します。結果は次のようになります。

("ac" "bd" "ce")

str は可変数の引数を取ることができるので、任意の数のコレクションで使用できます。 4つのコレクションを渡す

(map str ["a" "b" "c"] ["d" "e" "f"] ["g" "h" "i"] ["j" "k" "l"])

評価する

("adgj" "behk" "cfil")
12
追加された
または(文字列 "a" "b" "c" "[" c "" d "" e "])
追加された 著者 Brian Carper,
@ブライアン:ありがとう、テキストに答えるためにこれを追加しました。
追加された 著者 Nathan Hughes,
@マーク:同意し、不要な匿名関数を完全に削除するために書き直しました。
追加された 著者 Nathan Hughes,
いい答えです。マップが複数のコレクションを扱う方法を知ることに依存していますが、必ずしもチュートリアルでカバーされていないようです。
追加された 著者 Adrian Mouat,
str が最大2つの引数を取ったとしても、 map strmap#(str %% 2)よりも優れています。既存の関数を直接渡すだけで新しい関数を宣言しないでください。
追加された 著者 Mark Reed,