У vb.net або C # я міг би очікувати, що найшвидшим загальним підходом для порівняння змінної з будь-якою розумною кількістю окремо названих об'єктів (на відміну, наприклад, від усіх речей у колекції) буде просто порівняння кожного об'єкта з порівнянним набагато як ви зробили. Безумовно, можна створити екземпляр колекції та перевірити, чи містить він об’єкт, і це може бути виразніше, ніж порівняння об’єкта з усіма елементами окремо, але якщо хтось не використовує конструкцію, яку компілятор може явно розпізнати, такий код майже напевно буде набагато повільнішим, ніж просто проведення індивідуальних порівнянь. Я б не хвилювався про швидкість, якщо код за своєю природою працюватиме щонайбільше кілька сотень разів на секунду, але я би з обережністю ставився до того, щоб код був замінений на щось таке, що '
Альтернативний підхід, якщо змінна є чимось на зразок типу перелічення, полягає у виборі значень перерахування потужності двох, щоб дозволити використання бітових масок. Якщо тип перерахування має 32 чи менше допустимих значень (наприклад, починаючи Гаррі = 1, Рон = 2, Герміона = 4, Джіні = 8, Невілл = 16), можна зберегти їх у цілому числі та перевірити наявність кількох бітів одночасно операція ((if ((thisOne & (Harry | Ron | Neville | Beatrix))! = 0) / * Зробіть щось * /. Це дозволить швидкий код, але обмежується переліками з невеликою кількістю значень.
Дещо потужніший підхід, але такий, який слід використовувати обережно, полягає у використанні деяких бітів значення для позначення атрибутів чогось, тоді як інші біти ідентифікують елемент. Наприклад, біт 30 може вказувати на те, що персонаж є чоловіком, біт 29 може означати друга Гаррі тощо, тоді як нижні біти розрізняють символи. Цей підхід дозволить додавати персонажів, які можуть бути друзями Гаррі, а можуть і не вимагати, не вимагаючи зміни коду, який перевіряє друзя Гаррі. Одне застереження при цьому полягає в тому, що потрібно розрізняти константи перерахування, які використовуються для ВСТАНОВЛЕННЯ значення перелічення, та ті, що використовуються для ТЕСТУВАННЯ. Наприклад, щоб встановити змінну для позначення Гаррі, можна встановити значення 0x60000001, але щоб побачити, чи є змінна Гаррі, слід перевірити її бітом за допомогою 0x00000001.
Ще один підхід, який може бути корисним, якщо загальна кількість можливих значень є помірним (наприклад, 16-16 000 або близько того), - мати масив прапорів, пов’язаних із кожним значенням. Потім можна кодувати щось на зразок "if ((((characterAttributes [theCharacter] & chracterAttribute.Male)! = 0)".) Цей підхід буде найкращим чином працювати, коли кількість символів досить мала. Якщо масив занадто великий, помилки кешу можуть сповільнитися знизити код до такої міри, що тестування проти невеликої кількості символів окремо було б швидшим.
value == 1 || value == 2
.