包含还是for-loop,什么更有效?

时间:2016-10-28 17:47:02

标签: swift for-loop contains

使用Swift,我有一个大约30个字符串的数组(每个字符串是一个单词)。我也有一个变量字符串,我想检查字符串中是否有匹配值。

我的问题是,从效率的角度来看,我应该使用:

if myArray.contains("MyString") {
    //Do stuff
}

或者我应该循环一下吗?

for i in 0..<myArray.count {
    if myArray[i] == "MyString" {
        //Do stuff
    }
}

3 个答案:

答案 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