Gehen tut haben ", wenn " x "in" - Konstrukt ähnlich zu Python?
Ohne Iteration über das gesamte array, wie kann ich überprüfen, ob x
im array mit Gehen? Hat die Sprache ein Konstrukt ist?
Wie Python: if "x" in array: ...
- Könnte ein dupe von stackoverflow.com/q/8307478/180100
- AFAIK, gibt Es keine Kurzform für die, die in gehen. Intern, python auch iteriert über das array, gibt es keinen Weg darum herum.
- BTW, ein wichtiger Hinweis hierzu ist, dass es keine Möglichkeit gibt, dies zu tun (wie Sie Fragen, für) "[w]hne Iteration über das gesamte array". Solche Schleifen explizite (oder hinter einer Funktion wie
strings.Index
) hilft es immer deutlicher, was der code macht. Ich habe den Eindruck, dass Sie vielleicht denken, Pythonin array:
etwas fallen/Magie. AFAIK ist es nicht. So die Schleife explizite hilft stellen Sie den Schreiber (und allen Lesern) bewusst und berücksichtigen Sie auch andere Implementierungen (z.B. eine Karte). - Allerdings, wenn "x" im set ist in der Tat sehr schnell.
- Ich glaube nicht, dass wir Fragen, für eine programmatisch schnell Ansatz, wir sind nur zu Fragen für eine präzise (und immer noch nicht habe...)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine built-in-operator, um es in der Go. Sie benötigen zur Iteration über das array. Sie können schreiben Sie Ihre eigene Funktion, es zu tun, wie diese:
Wenn Sie wollen, um in der Lage zu prüfen, die Mitgliedschaft ohne Durchlaufen der ganzen Liste, müssen Sie eine Karte statt einem array oder einer Scheibe, so wie hier:
Andere Lösung, wenn die Liste enthält statische Werte.
z.B.: überprüfung auf einen gültigen Wert aus einer Liste Gültiger Werte:
Dies ist Zitat aus dem Buch "Programmieren in Go: Erstellung von Anwendungen für das 21 Jahrhundert":
https://play.golang.org/p/UIndYQ8FeW
Obigen Beispiel mit sort ist in der Nähe, aber im Fall von strings verwenden Sie einfach SearchString:
https://golang.org/pkg/sort/#SearchStrings
sort.SearchStrings
.Hatte gerade ähnliche Frage und beschlossen, zu versuchen, einige der Vorschläge in diesem thread.
Habe ich zudem best-und worst-case-Szenarien von 3 Arten von Suche:
hier ist die Funktion code:
best-case-Szenarien wählen Sie das erste Element in den Listen, schlimmsten Fall diejenigen verwenden, nonexistant Wert.
hier sind die Ergebnisse:
BenchmarkBelongsToMapWorstCase-4 2000000 787 ns/op
BenchmarkBelongsToSwitchWorstCase-4 2000000000 0.35 ns/op
BenchmarkBelongsToListWorstCase-4 100000000 14.7 ns/op
BenchmarkBelongsToMapBestCase-4 2000000 683 ns/op
BenchmarkBelongsToSwitchBestCase-4 100000000 10.6 ns/op
BenchmarkBelongsToListBestCase-4 100000000 10.4 ns/op
Switch gewinnt alles, der Weg, der Schlimmste Fall ist, überdurchschnittlich schneller als im besten Fall.
Maps sind die schlimmsten und in der Liste näher zu wechseln.
Also die moral der Geschichte ist:
Wenn Sie eine statische, relativ kleine Liste, switch-Anweisung ist der Weg zu gehen.
Andere option ist die Verwendung einer Karte als ein set. Verwenden Sie nur die Tasten und den Wert so etwas wie eine boolean-immer true. Dann können Sie einfach überprüfen, ob die Karte enthält den Schlüssel oder nicht. Dies ist nützlich, wenn Sie das Verhalten eines Satzes, wo, wenn Sie fügen Sie einen Wert mehrfach ist es nur im set einmal.
Hier ist ein einfaches Beispiel, wo ich hinzufügen Zufallszahlen als Schlüssel zu einer Karte. Wenn die gleiche Zahl erzeugt wird, mehr als einmal, es spielt keine Rolle, es erscheinen nur in der letzten Karte einmal. Dann verwende ich eine einfache wenn-check, um zu sehen, ob ein Schlüssel in der Karte oder nicht.
Hier ist er auf den Spielplatz gehen