Наиболее краткий способ определить, равна ли переменная значению из "списка" значений
-
09-06-2019 - |
Вопрос
Если у меня есть переменная в C #, которую нужно проверить, чтобы определить, равна ли она одной из набора переменных, каков наилучший способ сделать это?
Я не ищу решение, которое хранит набор в массиве.Мне больше любопытно посмотреть, есть ли решение, которое каким-то образом использует логическую логику для получения ответа.
Я знаю, что мог бы сделать что-то подобное:
int baseCase = 5;
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5;
Мне любопытно посмотреть, смогу ли я сделать что-то более подобное:
int baseCase = 5;
bool testResult = baseCase == (3 | 7 | 12 | 5);
Очевидно, что вышеприведенное не сработает, но мне интересно посмотреть, есть ли что-то более сжатое, чем мой первый пример, в котором нужно повторять одну и ту же переменную снова и снова для каждого тестового значения.
Обновить:
Я решил принять ответ Корэйна, поскольку это кажется самым простым подходом.Я думаю, это практично и все еще просто для понимания новичка.
К сожалению, там, где я работаю, наша система использует .NET 2.0 Framework, и нет никаких шансов на обновление в ближайшее время.Существуют ли какие-либо другие решения, которые не зависят от платформы .NET 3.5, помимо самого очевидного, о котором я могу подумать:
new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);
Решение
bool b = new int[] { 3,7,12,5 }.Contains(5);
Другие советы
Вы можете сделать нечто подобное с .NET 2.0, воспользовавшись тем фактом, что массив T реализует IList<T>, а IList<T> имеет метод Contains .Следовательно, следующее эквивалентно решению Corey для .NET 3.5, хотя, очевидно, менее понятно:
bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5);
Я часто использую IList<T> для объявления массива или, по крайней мере, для передачи аргументов одномерного массива.Это означает, что вы можете использовать свойства IList, такие как Count, и легко переключаться с массива на список.Например.
private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 };
Поскольку вы не указали, какой тип данных у вас есть в качестве входных данных, я собираюсь предположить, что вы можете разделить свои входные данные на степени 2 -> 2,4,8,16...Это позволит вам использовать биты, чтобы определить, является ли ваше тестовое значение одним из битов во входных данных.
4 => 0000100
16 => 0010000
64 => 1000000
используя некоторую двоичную математику...
Список тестов = 4 + 16 + 64 => 1010100
Тестовое значение = 16
TestResult = Список тестов и значение теста