Irgendwelche Ideen was ????
sein soll? Gibt es eine eingebaute? Was wäre der beste Weg, um diese Aufgabe zu erfüllen?
(def v ["one" "two" "three" "two"])
(defn find-thing [ thing vectr ]
(????))
(find-thing "two" v) ; ? maybe 1, maybe '(1,3), actually probably a lazy-seq
Antworten:
Eingebaut:
Wenn Sie eine faule Abfolge der Indizes für alle Übereinstimmungen wünschen:
quelle
indexOf
Methode des Vektors , die aufgerufen wird, nicht die von String:#<Method public int clojure.lang.APersistentVector.indexOf(java.lang.Object)>
Stuart Halloway hat in diesem Beitrag eine wirklich nette Antwort gegeben: http://www.mail-archive.com/[email protected]/msg34159.html .
Wenn Sie den ersten Wert abrufen möchten, verwenden Sie einfach
first
das Ergebnis.EDIT: Weil
clojure.contrib.seq
verschwunden ist, habe ich meine Antwort mit einem Beispiel einer einfachen Implementierung aktualisiert:quelle
clojure.contib.seq
Clojure 1.6? Keine Bibliothek in Liste: dev.clojure.org/display/community/Where+Did+Clojure.Contrib+Gopositions
.Aber ich möchte Sie davor warnen, mit Indizes herumzuspielen: Meistens wird es weniger idiomatische, unangenehme Clojure produzieren.
quelle
Ab Clojure 1.4 ist clojure.contrib.seq (und damit die
positions
Funktion) nicht verfügbar, da ein Betreuer fehlt: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+GoDie Quelle
clojure.contrib.seq/positions
und Abhängigkeitclojure.contrib.seq/indexed
ist:Hier verfügbar: http://clojuredocs.org/clojure_contrib/clojure.contrib.seq/positions
quelle
Ich habe versucht, meine eigene Frage zu beantworten, aber Brian hat mich mit einer besseren Antwort geschlagen!
quelle
Hier ist mein Beitrag, eine
loop
Struktur zu verwenden undnil
bei einem Fehler zurückzukehren.Ich versuche, Schleifen zu vermeiden, wenn ich kann, aber es scheint für dieses Problem geeignet zu sein.
quelle
Ich musste in letzter Zeit mehrmals Indizes finden oder entschied mich dafür, da es einfacher war, als einen anderen Weg zu finden, um das Problem anzugehen. Unterwegs stellte ich fest, dass meine Clojure-Listen nicht die Methode .indexOf (Object object, int start) hatten. Ich habe das Problem folgendermaßen behandelt:
quelle
Ich würde mit redu-kv gehen
quelle