Clojure で述語に一致する要素のインデックスを見つけるには? 質問する

Clojure で述語に一致する要素のインデックスを見つけるには? 質問する

Clojure では、このベクトル内の正の値を持つ最初のインデックスをどのように見つけるのでしょうか[-1 0 3 7 9]?

firstとを使用すると、かなりエレガントに最初の結果を得ることができることはわかっていますfilter

(first (filter pos? [-1 0 99 100 101]))

このコードは値 を返します99。必要な答えはインデックス です2

ベストアンサー1

使用keep-indexed述語が満たされるインデックスのシーケンスを取得できます。

(defn indices [pred coll]
   (keep-indexed #(when (pred %2) %1) coll))

この簡単な関数を使えば、次の式で問題を解決できます。

user=> (first (indices pos? [-1 0 99 100 101]))
2

keep-indexed(および)の遅延によりindices、シーケンス全体を実現する必要がないため、余分な計算は実行されないことに注意してください。

おすすめ記事