Ich muss überprüfen, ob eine bestimmte Zeichenkette aus einem Satz vorgegebener Zeichenketten besteht.Tabellenzugriff vs Funktionsaufruf + bedingte Bestimmung: Was ist schneller?
Zwei Methoden kam es mir in dem Sinn zu tun: eine Tabelle Einrichten auf einem bestimmten Wert true zurück
local isParticular = {
[string1] = true,
[string2] = true
}
print(isParticular[string1]) -- true
print(isParticular[randomString]) -- nil -> false
Oder die Einstellung eine Funktion mit einer bedingten Bestimmung
function isParticular(s)
return s == string1 or s == string2
end
print(isParticular(string1)) -- true
print(isParticular(randomString)) -- false
zu überprüfen Von dem, was ich verstehe, würde die Tabellenmethode sowohl für die einzelnen Strings als auch für die verschiedenen Strings die gleiche Zeit beanspruchen, während der Funktionsaufruf wegen der Kurzschlussauswertung weniger Zeit für string1
und mehr Zeit für string2
benötigt und randomString
.
Auch sind sowohl der Funktionsaufruf als auch der Tabellenzugriff dafür bekannt, dass ein wenig Overhead verursacht wird, aber vielleicht kann die Kurzschlussauswertung den Unterschied ausmachen (langsamer zu sein denke ich, besonders berücksichtigt habe ich mehr als 2 bestimmte Strings und dass die Zeichenfolge meistens nicht mit ihnen übereinstimmt).
Welche Methode sollte ich verwenden?
Es gibt nur einen Weg, um sicher zu sein: Profil beide! Ich bezweifle jedoch, dass Sie einen Unterschied sehen werden: Wenn Sie in Erwägung ziehen, "oder" zu verketten, sagt das, dass Sie nicht zu viele Elemente haben, die Sie überprüfen müssen, so dass Sie sich keine Gedanken über die Skalierung machen müssen. –