我是学生,我想知道最有效的方法是检查数组中是否存在某个值。
我的第二次尝试:
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会对代码的速度或一致性产生负面影响,是否有更好的方法可以实现这一目标?
答案 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
)