[英]Comparing One Value To A Whole Array? (C#)
假设我有一个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);
在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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.