c# - 将一个值与整个数组进行比较? (C#)

标签 c# arrays variables equals

假设我有一个 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/

相关文章:

C# - 元组和字典和列表有什么区别

c++ - 使用相同的参数名称和成员名称是否有效

c# - 为只能使用一次的软件创建唯一 key

c# - Uncaught Error : No value passed to payment

c++ - 是否可以在 C++ 中交换任意大小的数组?

javascript - 如何在 JavaScript 中创建数组?

Javascript 变量正在消失

c++ - 未初始化变量的值从何而来?

C# 从原生 PE 中提取资源

python - numpy 数组求和函数