lập danh sách các vectơ chứa các mục kết hợp với các chỉ số,
(def with-indexes (map #(vector %1 %2) ['a 'b 'c 'd 'e 'f] (range)))
#'clojure.core/with-indexes
with-indexes
([a 0] [b 1] [c 2] [d 3] [e 4] [f 5])
lọc danh sách này
lojure.core=> (def filtered (filter #(#{1 3 5 7} (second %)) with-indexes))
#'clojure.core/filtered
clojure.core=> filtered
([b 1] [d 3] [f 5])
sau đó loại bỏ các chỉ số.
clojure.core=> (map first filtered)
(b d f)
thì chúng ta thread nó cùng với các "chủ đề cuối cùng" vĩ mô
(defn filter-by-index [coll idxs]
(->> coll
(map #(vector %1 %2)(range))
(filter #(idxs (first %)))
(map second)))
clojure.core=> (filter-by-index ['a 'b 'c 'd 'e 'f 'g] #{2 3 1 6})
(b c d g)
Các đạo đức của câu chuyện là, phá vỡ nó thành các phần độc lập nhỏ, kiểm tra chúng, sau đó soạn chúng thành một chức năng làm việc .
Nguồn
2011-10-12 18:59:33
Tuyệt vời, thx! Tôi đã có một cái gì đó như thế, nhưng tôi không thể tìm ra để sử dụng "phạm vi" đúng cách. – qollin
Tôi đang cuộn nó thành một funciton đẹp, chỉnh sửa sớm :) –
ohh và lưu ý rằng tôi đã chuyển danh sách các chỉ mục cho một vectơ các chỉ mục. Điều này là do bộ có thể được sử dụng như một chức năng lọc. –