¿Cómo puedo encontrar el índice del miembro más pequeño de este vector en Clojure?

StackOverflow https://stackoverflow.com/questions/8815772

  •  26-10-2019
  •  | 
  •  

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?

¿Fue útil?

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
scroll top