Birleştirilmiş dizeleri listelemek için clojure içinde iki liste Zip

Almak için iki liste zip eşlemesi yerine:

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

İlk listenin ilk elemanını ikinci listenin ilk öğesiyle birleştirmek istiyorum:

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

veya ters sırada.

6

1 cevap

Bunu harita </​​code> ile yapabilirsiniz. map birden fazla koleksiyon alabilir, her koleksiyondan sonraki öğeyi alır ve ilk argüman olarak iletilen işleve (koleksiyonlardan biri bittiğinde durma) geçirir. Böylece, n argümanları ve n koleksiyonları alan bir işlevi iletebilirsiniz.

İfade

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

önce "a" ve "c" ile str , sonra "b" ve "d" ile, sonra "c" ve "e" ile arayacaktır. Sonuç olacak

("ac" "bd" "ce")

str değişken sayıda argüman alabildiğinden, herhangi bir sayıda koleksiyonla kullanılabilir. Dört koleksiyonda geçmek gibi

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

değerlendirecek

("adgj" "behk" "cfil")
12
katma
Veya (harita str ["a" "b" "c"] ["c" "d" "e"])
katma yazar Brian Carper, kaynak
@Brian: Teşekkürler, metni cevaplamak için bunu ekledim.
katma yazar Nathan Hughes, kaynak
@Mark: anlaşılmamış, gereksiz anonim işlevi tamamen kaldırmak için yeniden yazdı.
katma yazar Nathan Hughes, kaynak
İyi cevap. Haritaların, her zaman öğreticilerde yer almayan, birden çok koleksiyonla nasıl anlaştıklarını bilmeye dayanır.
katma yazar Adrian Mouat, kaynak
str , en fazla iki argüman alsa bile map str , map # (str%% 2) 'den daha iyidir. Mevcut olanı doğrudan ilettiğinizde yeni işlevleri bildirmekten kaçınmalısınız.
katma yazar Mark Reed, kaynak