Обработка пар значений из двух последовательностей в Clojure

StackOverflow https://stackoverflow.com/questions/1009037

  •  06-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь попасть в сообщество Clojure.Я много работал с Python, и одна из функций, которые я широко использую, — это метод zip() для перебора пар значений.Есть ли (умный и короткий) способ добиться того же в Clojure?

Это было полезно?

Решение

Другой способ - просто использовать map вместе с некоторой функцией, которая собирает свои аргументы в последовательности, например так:

user=> (map vector '(1 2 3) "abc")
([1 \a] [2 \b] [3 \c])

Другие советы

(zipmap [:a :b :c] (range 3))
-> {:c 2, :b 1, :a 0}

Итерация по картам происходит попарно, например.так:

(doseq [[k v] (zipmap [:a :b :c] (range 3))]
  (printf "key: %s, value: %s\n" k v))

принты:

key: :c, value: 2
key: :b, value: 1
key: :a, value: 0

На вопрос был получен ответ, но все еще есть interleave , который также обрабатывает произвольное количество последовательностей, но не группирует полученную последовательность в кортежи (но вы можете использовать partition для этого).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top