¿Cómo puedo encontrar el índice del miembro más pequeño de este vector en Clojure?
Pregunta
He usado la siguiente expresión para recuperar el índice del número más pequeño en un vector. Sin embargo, me gustaría evitar el uso de .indexOf
(Por razones de eficiencia y tal vez precisión numérica, aunque supongo que los números se convierten implícitamente en cuerdas).
(.indexOf [1 2 3 4 0 5]
(reduce #(if (< %1 %2) %1 %2) [1 2 3 4 0 5] ))
¿Sería posible hacerlo de manera diferente utilizando reducir?
Solución
user=> (first (apply min-key second (map-indexed vector [1 2 4 0 5]))) 3
Otros consejos
Sugeriría usar bucle/recur si desea hacer esto de manera eficiente, tal vez algo como lo siguiente:
(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))))
La idea es iterar en todo el vector, realizando un seguimiento del mínimo y el índice del valor mínimo encontrado hasta ahora en cada punto.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow