Jak określić położenie elementu obecnego w plasterku?
Potrzebuję czegoś takiego:
type intSlice []int
func (slice intSlice) pos(value int) int {
for p, v := range slice {
if (v == value) {
return p
}
}
return -1
}
Odpowiedzi:
Przepraszamy, nie ma do tego ogólnej funkcji biblioteki. Go nie ma prostego sposobu pisania funkcji, która może działać na dowolnym wycinku.
Twoja funkcja działa, chociaż byłoby trochę lepiej, gdybyś ją napisał za pomocą
range
.Jeśli zdarzy się, że masz wycinek bajtu, jest tam bajty.IndexByte .
źródło
if element in collection: do_something()
Możesz stworzyć ogólną funkcję w idiomatyczny sposób:
I użycie:
źródło
-1
aby zwracanie po błędzie było idiomatyczne, zamiast tego należy użyć wielokrotnego powrotu. (Jestem nowy w golang, ale to właśnie przeczytałem)Możesz napisać funkcję;
Zwraca indeks znaku / ciągu, jeśli pasuje do elementu. Jeśli nie zostanie znaleziony, zwraca -1.
źródło
Nie ma do tego funkcji bibliotecznej. Musisz kodować samodzielnie.
źródło
źródło
Inną opcją jest posortowanie plasterka za pomocą pakietu sortowania, a następnie wyszukanie rzeczy, której szukasz:
wydruki
Działa to dla podstawowych typów i zawsze możesz zaimplementować interfejs sortowania dla własnego typu, jeśli potrzebujesz popracować nad kawałkiem innych rzeczy. Zobacz http://golang.org/pkg/sort
Zależy jednak od tego, co robisz.
źródło
for p, v := range ...
iif
. Chciałem tylko wskazać opcję.