使用Swift,我有一个大约30个字符串的数组(每个字符串是一个单词)。我也有一个变量字符串,我想检查字符串中是否有匹配值。
我的问题是,从效率的角度来看,我应该使用:
if myArray.contains("MyString") {
//Do stuff
}
或者我应该循环一下吗?
for i in 0..<myArray.count {
if myArray[i] == "MyString" {
//Do stuff
}
}
答案 0 :(得分:3)
从效率的角度来看,使用myArray.contains("myString")
会更有效,因为一旦达到等于“myString”的值就会停止,如果它确实存在于数组中的话。即使在找到您指定的值之后,for-loop
将继续遍历所有值,因此效率较低但可能只提供可忽略的效率升级,除非该数组具有大量元素。
就像@vadian说的还有第三种方式。还有第四种方法,使用while-loop
,您可以在使用break
找到您搜索到的值后停止(您也可以在{{1}中执行此操作但是,使用for-loop
更加可读和简洁,因此在我看来是最好的选择。
答案 1 :(得分:2)
这是代码可读性比性能更重要的事情。除非你有一个非常庞大的数组,否则for循环和包含的差异几乎不会引起注意。在我看来,你应该使用contains。
答案 2 :(得分:0)
如果你真的关心性能并且你有一个大型数据集,HashSet或者在Swift中,只需设置将为包含调用提供O(1)查找时间。因此,使用更好的数据结构将对性能产生巨大影响,而使用循环或包含函数的实现细节将是非因素。
Set([1, 2, 3, 4, 5]).contains(3) //O(1)
[1, 2, 3, 4, 5].contains(3) //O(log n) assuming a binary search