Comment puis-je trouver l'index du plus petit membre de ce vecteur dans Clojure?

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

  •  26-10-2019
  •  | 
  •  

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?

Était-ce utile?

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