假设我有一个C#变量和数组:
int variable_1 = 1;
int[3] array_1 = {1,2,3};
如何在不通过array_1循环的情况下检查variable_1的值是否等于array_1中的任何值?
答案 0 :(得分:26)
必须循环。以下任何一种都可以使用:
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表达式的所有版本对我来说都有点过分,但是如果你发现自己处于一种你不知道你正在寻找的实际值的情况下它们可能是有用的 - 只是一些条件。 / p>
如果您知道数组已排序,则可以使用:
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);
答案 1 :(得分:18)
在3.5及以上
array_1.Contains(variable_1);
或2.0
array_1.IndexOf(variable_1) != -1
更新:保存性能
答案 2 :(得分:1)
mmm可以有各种选项,
var hasItem = Array.Exists(array_1, x => x == variable_1);