Wie bestimmt man die Position eines in Slice vorhandenen Elements?
Ich brauche so etwas wie das Folgende:
type intSlice []int
func (slice intSlice) pos(value int) int {
for p, v := range slice {
if (v == value) {
return p
}
}
return -1
}
Antworten:
Leider gibt es dafür keine generische Bibliotheksfunktion. Go hat keine einfache Möglichkeit, eine Funktion zu schreiben, die auf jedem Slice ausgeführt werden kann.
Ihre Funktion funktioniert, obwohl es etwas besser wäre, wenn Sie sie mit schreiben würden
range
.Wenn Sie zufällig ein Byte-Slice haben, gibt es bytes.IndexByte .
quelle
if element in collection: do_something()
Sie können generische Funktionen auf idiomatische Weise erstellen:
Und Verwendung:
quelle
-1
für einen Fehler idiomatisch ist, sondern die mehrfache Rückgabe. (Ich bin neu in Golang, aber das habe ich gelesen)Sie könnten eine Funktion schreiben;
Dies gibt den Index eines Zeichens / einer Zeichenfolge zurück, wenn er mit dem Element übereinstimmt. Wenn es nicht gefunden wird, wird -1 zurückgegeben.
quelle
Dafür gibt es keine Bibliotheksfunktion. Sie müssen selbst codieren.
quelle
quelle
Eine andere Möglichkeit besteht darin, das Slice mithilfe des Sortierpakets zu sortieren und dann nach dem gesuchten Objekt zu suchen:
druckt
Dies funktioniert für die Basistypen und Sie können jederzeit die Sortierschnittstelle für Ihren eigenen Typ implementieren, wenn Sie an einem Teil anderer Dinge arbeiten müssen. Siehe http://golang.org/pkg/sort
Kommt aber darauf an, was du machst.
quelle
for p, v := range ...
undif
. Ich wollte nur auf die Option hinweisen.