假设我有一个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)(其他所有方法都是O(n)),但它确实需要先对数组进行排序。
个人而言,我通常会使用第一种形式-假设您正在使用.NET 3.5或更高版本。
如果您需要检查多个项目并且数组很大,则可能需要创建一个HashSet<int>
:
HashSet<int> hashSet = new HashSet<int>(array_1);
bool exists = hashSet.Contains(variable_1);
在3.5及以上版本中
array_1.Contains(variable_1);
或者 2.0array_1.IndexOf(variable_1) != -1
更新:为了节省性能
嗯,有各种不同的选项,
var hasItem = Array.Exists(array_1, x => x == variable_1);