In vb.net oder C # würde ich erwarten, dass der schnellste allgemeine Ansatz zum Vergleichen einer Variablen mit einer angemessenen Anzahl von Objekten mit separatem Namen (im Gegensatz zu z. B. allen Dingen in einer Sammlung) darin besteht, jedes Objekt einfach mit dem Vergleich zu vergleichen wie du es getan hast. Es ist sicherlich möglich, eine Instanz einer Sammlung zu erstellen und zu prüfen, ob sie das Objekt enthält. Dies ist möglicherweise aussagekräftiger als der Vergleich des Objekts mit allen Elementen einzeln, es sei denn, man verwendet ein Konstrukt, das der Compiler explizit erkennen kann, einen solchen Code wird mit ziemlicher Sicherheit viel langsamer sein als nur die einzelnen Vergleiche. Ich würde mir keine Sorgen um die Geschwindigkeit machen, wenn der Code von Natur aus höchstens ein paar hundert Mal pro Sekunde ausgeführt wird, aber ich wäre vorsichtig, wenn der Code für etwas verwendet würde, das '
Ein alternativer Ansatz, wenn eine Variable so etwas wie ein Aufzählungstyp ist, besteht darin, Zweierpotenz-Aufzählungswerte zu wählen, um die Verwendung von Bitmasken zu ermöglichen. Wenn der Aufzählungstyp 32 oder weniger gültige Werte hat (z. B. Harry = 1, Ron = 2, Hermine = 4, Ginny = 8, Neville = 16), könnte man sie in einer ganzen Zahl speichern und in einem einzigen auf mehrere Bits gleichzeitig prüfen operation ((if ((thisOne & (Harry | Ron | Neville | Beatrix))! = 0) / * Mach etwas * /. Dies ermöglicht schnellen Code, ist jedoch auf Aufzählungen mit einer kleinen Anzahl von Werten beschränkt.
Ein etwas leistungsfähigerer Ansatz, der jedoch mit Vorsicht angewendet werden muss, besteht darin, einige Bits des Werts zu verwenden, um Attribute von etwas anzuzeigen, während andere Bits das Element identifizieren. Zum Beispiel könnte Bit 30 anzeigen, dass ein Zeichen männlich ist, Bit 29 könnte einen Freund von Harry usw. anzeigen, während die unteren Bits zwischen Zeichen unterscheiden. Dieser Ansatz würde das Hinzufügen von Charakteren ermöglichen, die möglicherweise ein Freund von Harry sind oder nicht, ohne dass der Code, der nach Freunden von Harry sucht, geändert werden muss. Eine Einschränkung dabei ist, dass man zwischen Aufzählungskonstanten, die zum Einstellen eines Aufzählungswerts verwendet werden, und solchen, die zum Testen verwendet werden, unterscheiden muss. Um beispielsweise eine Variable festzulegen, die Harry anzeigt, möchten Sie sie möglicherweise auf 0x60000001 setzen. Um jedoch zu sehen, ob eine Variable Harry ist, sollten Sie sie mit 0x00000001 testen.
Ein weiterer Ansatz, der nützlich sein kann, wenn die Gesamtzahl der möglichen Werte moderat ist (z. B. 16-16.000 oder so), besteht darin, jedem Wert ein Array von Flags zuzuordnen. Man könnte dann so etwas wie "if (((characterAttributes [theCharacter] & chracterAttribute.Male)! = 0)" codieren. Dieser Ansatz funktioniert am besten, wenn die Anzahl der Zeichen relativ klein ist. Wenn das Array zu groß ist, können Cache-Fehler langsamer werden Reduzieren Sie den Code bis zu dem Punkt, dass das Testen mit einer kleinen Anzahl von Zeichen einzeln schneller wäre.
value == 1 || value == 2
.