I have a sequence s
and a list of indexes into this sequence indexes
. How do I retain only the items given via the indexes?
Simple example:
The easiest solution is to use map
:
(defn filter-by-index [coll idx]
(map (partial nth coll) idx))
You can use keep-indexed:
(defn filter-by-index [coll idxs]
(keep-indexed #(when ((set idxs) %1) %2)
coll))
Another version using explicit recur and lazy-seq:
(defn filter-by-index [coll idxs]
(lazy-seq
(when-let [idx (first idxs)]
(if (zero? idx)
(cons (first coll)
(filter-by-index (rest coll) (rest (map dec idxs))))
(filter-by-index (drop idx coll)
(map #(- % idx) idxs))))))