Stuart Halloway đã đưa ra một câu trả lời thực sự tuyệt vời trong bài đăng này http://www.mail-archive.com/clojure@googlegroups.com/msg34159.html .
(use '[clojure.contrib.seq :only (positions)])
(def v ["one" "two" "three" "two"])
(positions #{"two"} v)
Nếu bạn muốn lấy giá trị đầu tiên, chỉ cần sử dụng first
trên kết quả.
(first (positions #{"two"} v))
CHỈNH SỬA: Vì clojure.contrib.seq
đã biến mất nên tôi đã cập nhật câu trả lời của mình bằng một ví dụ về cách triển khai đơn giản:
(defn positions
[pred coll]
(keep-indexed (fn [idx x]
(when (pred x)
idx))
coll))