Скажем, у меня есть переменная C# и массив:
int variable_1 = 1;
int[3] array_1 = {1,2,3};
Как я могу проверить, равно ли значение variable_1 какому-либо из значений в array_1 без цикличного выполнения через array_1?
Ну что-то должно зацикливаться. Любое из следующего будет работать:
bool exists = array.Contains(variable_1);
bool exists = Array.IndexOf(array_1, variable_1) != -1;
bool exists = Array.Exists(array_1, x => x == variable_1);
bool exists = Array.FindIndex(array_1, x => x == variable_1) != -1;
bool exists = array_1.Any(x => x == variable_1);
Все версии, в которых используется лямбда-выражение, кажутся мне излишними, но они потенциально полезны, если вы окажетесь в ситуации, когда вы не знаете фактическое значение, которое ищете. для - просто какое-то условие.
Если вы знаете, что массив отсортирован, вы можете использовать:
bool exists = Array.BinarySearch(array_1, variable_1) >= 0;
Это будет O (log n), а не O (n) (как и все остальные), но для этого требуется, чтобы массив был отсортирован первый.
Лично я обычно использую самую первую форму - если вы используете .NET 3.5 или выше.
Если вам нужно проверить несколько элементов, а массив большой, вы можете создать HashSet
:
HashSet<int> hashSet = new HashSet<int>(array_1);
bool exists = hashSet.Contains(variable_1);
в версии 3.5 и выше
array_1.Contains(variable_1);
или 2.0
array_1.IndexOf(variable_1) != -1
Обновлено: для экономии на производительности
ммм могут быть разные варианты,
var hasItem = Array.Exists(array_1, x => x == variable_1);