假设我有一个 C# 变量和数组:
int variable_1 = 1;
int[3] array_1 = {1,2,3};
如何在不遍历 array_1 的情况下检查 variable_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);
所有使用 lambda 表达式的版本对我来说都感觉有点矫枉过正,但如果您发现自己处于不知道要搜索的实际值(只是一些条件)的情况下,它们可能会有用。
如果你知道数组是有序的,你可以使用:
bool exists = Array.BinarySearch(array_1, variable_1) >= 0;
这将是 O(log n) 而不是 O(n)(所有其他的都是),但它确实需要先对数组进行排序。
我个人通常会使用第一种形式 - 假设您使用的是 .NET 3.5 或更高版本。
如果您需要检查多个项目并且数组很大,您可能需要创建一个 HashSet<int>
:
HashSet<int> hashSet = new HashSet<int>(array_1);
bool exists = hashSet.Contains(variable_1);
关于c# - 将一个值与整个数组进行比较? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579421/