Wie kann ich den Index des kleinsten Mitglieds dieses Vektors in Clojure finden?
Frage
Ich habe den folgenden Ausdruck verwendet, um den Index der kleinsten Zahl in einem Vektor abzurufen. Ich möchte jedoch die Verwendung von vermeiden .indexOf
(Aus Effizienzgründen und möglicherweise numerische Präzision, obwohl ich denke, dass die Zahlen implizit in Zeichenfolgen konvertiert werden).
(.indexOf [1 2 3 4 0 5]
(reduce #(if (< %1 %2) %1 %2) [1 2 3 4 0 5] ))
Wäre es möglich, es mit Reduzierung anders zu machen?
Lösung
user=> (first (apply min-key second (map-indexed vector [1 2 4 0 5]))) 3
Andere Tipps
Ich würde vorschlagen, Loop/Recur zu verwenden, wenn Sie dies effizient tun möchten, vielleicht so etwas wie folgt:
(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))))
Die Idee ist, über den gesamten Vektor zu iterieren und das Minimum und den Index des bisher gefundenen Mindestwerts an jedem Punkt zu verfolgen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow