Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将一个值与整个数组进行比较?(C#)_C#_Arrays_Variables_Equals - Fatal编程技术网

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

将一个值与整个数组进行比较?(C#),c#,arrays,variables,equals,C#,Arrays,Variables,Equals,假设我有一个C#变量和数组: int variable_1 = 1; int[3] array_1 = {1,2,3}; 如何检查变量_1的值是否等于数组_1中的任何值,而不通过数组_1循环?在3.5及更高版本中 array_1.Contains(variable_1); 或2.0 array_1.IndexOf(variable_1) != -1 更新:要节省性能mmm,可以有多种选项 var hasItem = Array.Exists(array_1, x => x == va

假设我有一个C#变量和数组:

int variable_1 = 1;
int[3] array_1 = {1,2,3};
如何检查变量_1的值是否等于数组_1中的任何值,而不通过数组_1循环?

在3.5及更高版本中

array_1.Contains(variable_1);
或2.0

array_1.IndexOf(variable_1) != -1

更新:要节省性能

mmm,可以有多种选项

var hasItem = Array.Exists(array_1, x => x == variable_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(logn),而不是O(n)(其他所有的都是),但是它确实需要首先对数组进行排序

就个人而言,我通常会选择第一种形式——假设您使用的是.NET3.5或更高版本

如果需要检查多个项目,且数组较大,则可能需要创建一个
哈希集

HashSet-HashSet=新的HashSet(数组_1);
bool exists=hashSet.Contains(变量_1);

通常,要检查多值结构内部是否存在,需要进行一定量的循环。如果您在应用程序中发现了一个瓶颈(通过配置文件)和一个循环,那么您可以添加一个索引,使其运行得更快。在.NET中,实现这一点最简单的方法可能是使用字典或哈希集。仅仅为了查找值而创建一个新列表对我来说太过分了。即使在2.0中,您也可以使用Array.IndexOf、Array.Exists、Array.FindIndex等!数组_1.IndexOf(变量_1)!=-我应该做这项工作
HashSet<int> hashSet = new HashSet<int>(array_1);
bool exists = hashSet.Contains(variable_1);