получить четные / нечетные индексированные элементы из коллекции (списка карт) в Clojure - PullRequest
9 голосов
/ 25 августа 2011

У меня есть список карт, мне нужно получить четные / нечетные индексированные элементы из этого списка в Clojure.Я не хочу повторять список с циклом for.Есть ли функция small или single_word?

Ответы [ 2 ]

27 голосов
/ 25 августа 2011
user=> (take-nth 2 [0 1 2 3 4 5 6 7 8 9])
(0 2 4 6 8)
user=> (take-nth 2 (rest [0 1 2 3 4 5 6 7 8 9]))
(1 3 5 7 9)
0 голосов
/ 25 августа 2011

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

(defn evens-and-odds [coll]
  (reduce (fn [result [k v]]
            (update-in result [(if (even? k) :even :odd)] conj v))
          {:even [] :odd []}
          (map-indexed vector coll)))

(evens-and­-odds [ "foo"­ "bar"­ "baz"­ "foob­ar" "quux­" ])
; -> {:even ["foo" "baz" "quux"], :odd ["bar" "foobar"]}
...