Come posso trovare l'indice del più piccolo membro di questo vettore in Clojure?

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

  •  26-10-2019
  •  | 
  •  

Domanda

ho usato la seguente espressione per recuperare l'indice del numero più piccolo in un vettore. Tuttavia, vorrei evitare l'uso di .indexOf (per ragioni di efficienza e precisione forse numerica, anche se credo che i numeri sono implicitamente convertiti in stringhe).

(.indexOf [1 2 3 4 0 5]
  (reduce #(if (< %1 %2) %1 %2) [1 2 3 4 0 5] ))

sarebbe possibile farlo in modo diverso usando ridurre?

È stato utile?

Soluzione

user=> (first (apply min-key second (map-indexed vector [1 2 4 0 5])))
3

Altri suggerimenti

Io suggerirei usando loop / RECUR se si vuole fare questo in modo efficace, forse qualcosa di simile al seguente:

(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'idea è di iterate attraverso l'intero vettore, tenere traccia del minimo e l'indice del valore minimo trovato finora in ogni punto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top