Wie kann ich den Index des kleinsten Mitglieds dieses Vektors in Clojure finden?

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

  •  26-10-2019
  •  | 
  •  

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?

War es hilfreich?

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