查找数组中是否存在值的最佳方法,如果是,则执行代码

时间:2017-05-10 09:57:20

标签: c# linq

我是学生,我想知道最有效的方法是检查数组中是否存在某个值。

我的第二次尝试:

string value = "pow";
string[] array = new string[] { "pong", "ping", "pow" };
bool valueIsInArray = false;
foreach(var s in array) if (s == value) valueIsInArray = true;
if (valueIsInArray)
{
    // code here
}

我研究过并发现如果我使用LINQ代码看起来像这样:

string value = "oink"; // value given to the method
string[] array = new string[] { "oink", "oink", "baboinkadoink" };
if (array.Contains(value))
{
    //code here
}

问题是,无论如何使用LINQ会对代码的速度或一致性产生负面影响,是否有更好的方法可以实现这一目标?

4 个答案:

答案 0 :(得分:1)

正如评论者所说,LiNQ在这里真的很麻烦你。差异是微观的(甚至在较大的收藏品上)。但是,如果您必须使用替代方案,请使用IndexOf。请参阅:https://msdn.microsoft.com/en-us/library/system.array.indexof(v=vs.110).aspx

示例:

string value = "oink"; // value given to the method
string[] array = new string[] { "oink", "oink", "baboinkadoink" };
if (Array.IndexOf(array, value) > -1)
{
    //code here
}

虽然我不确定Contains最终会在水下做什么,但他们可能会打电话给IndexOf

答案 1 :(得分:1)

使用linq Any(),可以在确定结果后立即停止源的枚举。

string value = "pow";
string[] array = new string[] { "pong", "ping", "pow" };
bool isValuePresent =  array.Any(x => x == value);

https://msdn.microsoft.com/en-us/library/bb534972(v=vs.110).aspx

答案 2 :(得分:0)

你必须遍历整个数组以检查值。 Linq或常规循环方法。或者您可以使用

Array.Find()

同样如此。最好使用Linq并使代码更简单。

快乐编码

答案 3 :(得分:0)

Willy-nilly你必须扫描 array直到第一场比赛(或整个array如果没有比赛);你可以放foreach循环:

 bool valueIsInArray = false;

 foreach (var item in array)
   if (item == value) {
     valueIsInArray = true;

     break; 
   }

使用for一个:

 bool valueIsInArray = false;

 foreach (int i = 0; i < array.Length; ++i)
   if (array[i] == value) {
     valueIsInArray = true;

     break; 
   }

尝试Array课程:

bool valueIsInArray = array.Contains(value);

借助 Linq

实施代码
bool valueIsInArray = array.Any(item => item == value);

这些方法的区别在于微秒(如果有的话);这就是为什么要为您提供最具可读性的版本的原因。我自己的选择是array.Contains(value) - 让系统为你工作隐藏不需要的详细信息(例如循环中的break