Comment puis-je trouver l'index du plus petit membre de ce vecteur dans Clojure?
Question
J'ai utilisé l'expression suivante pour récupérer l'index du plus petit nombre dans un vecteur. Cependant, je voudrais éviter l'utilisation de .indexOf
(pour des raisons d'efficacité et de précision peut-être numérique, même si je suppose que les chiffres sont convertis implicitement à des chaînes).
(.indexOf [1 2 3 4 0 5]
(reduce #(if (< %1 %2) %1 %2) [1 2 3 4 0 5] ))
Serait-il possible de le faire en utilisant différemment réduire?
La solution
user=> (first (apply min-key second (map-indexed vector [1 2 4 0 5]))) 3
Autres conseils
Je suggère d'utiliser la boucle / RECUR si vous voulez faire cela efficacement, peut-être quelque chose comme ce qui suit:
(defn min-index [v]
(let [length (count v)]
(loop [minimum (v 0)
min-index 0
i 1]
(if (< i length)
(let [value (v i)]
(if (< value minimum)
(recur value i (inc i))
(recur minimum min-index (inc i))))
min-index))))
L'idée est de itérer à travers le vecteur entier, garder une trace du minimum et l'indice de la valeur minimale trouvée jusqu'à présent à chaque point.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow