Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 获取较短版本的for循环?_Arrays_Swift_String_Optimization - Fatal编程技术网

Arrays 获取较短版本的for循环?

Arrays 获取较短版本的for循环?,arrays,swift,string,optimization,Arrays,Swift,String,Optimization,我正在使用Swift 3.0,并使用以下代码作为字符串类型的扩展来搜索数组中的项: extension String { func equal(compareToArray : [String]) -> Bool { for s in compareToArray { if self == s { return true } } return false

我正在使用Swift 3.0,并使用以下代码作为字符串类型的扩展来搜索数组中的项:

extension String {
    func equal(compareToArray : [String]) -> Bool {
        for s in compareToArray {
            if self == s {
                return true
            }
        }
        return false
    }
}
它运行得很好,但我的问题是,我能在更短/更简单或更快的时间内做得更好吗

好的,另一个类似的例子:

func contains(compareToArray : [String]) -> Bool {
    for s in compareToArray {
        if self.contains(s) {
            return true
        }
    }
    return false
}

更短、更简单、更快

let compareToArray = ["foo", "bar", "baz"]
compareToArray.contains("bar")
编辑:

根据你的第二个例子

!!compareToArray.filter{$0.containsoo}.isEmpty


更短、更简单、更快

let compareToArray = ["foo", "bar", "baz"]
compareToArray.contains("bar")
编辑:

根据你的第二个例子

!!compareToArray.filter{$0.containsoo}.isEmpty


如果要检查元素是否属于数组,在Swift 3.0中,这是一种更好的方法:

使用:

array.indexof:element->Int

例:


如果要检查元素是否属于数组,在Swift 3.0中,这是一种更好的方法:

使用:

array.indexof:element->Int

例:


是的,你说得对。我添加了另一个例子,不应该改变-好的,即使结果已经为真,该过滤器也会接受所有数组成员。它较短,但速度较慢。我不能决定哪一个更好谢谢。你的第一个例子比OP快多少?当然,打字速度更快,但contains在引擎盖下的功能完全相同。另外,即使$0.containsoo返回true,您的第二个示例也会不必要地遍历整个compareToArray。使用compareToArray.contains{…}会更好:@Hamish你说得对。我用另一个结尾更新了答案。太好了!就这样。更短,至少与显式版本一样快。非常感谢!:-是的,你说得对。我添加了另一个例子,不应该改变-好的,即使结果已经为真,该过滤器也会接受所有数组成员。它较短,但速度较慢。我不能决定哪一个更好谢谢。你的第一个例子比OP快多少?当然,打字速度更快,但contains在引擎盖下的功能完全相同。另外,即使$0.containsoo返回true,您的第二个示例也会不必要地遍历整个compareToArray。使用compareToArray.contains{…}会更好:@Hamish你说得对。我用另一个结尾更新了答案。太好了!就这样。更短,至少与显式版本一样快。谢谢!我正在使用内部函数(如filter,map,…)搜索for循环的一般优化。我正在使用内部函数(如filter,map,…)搜索for循环的一般优化。。。
let myArray = ["a", "b", "c"]
let needle = "b"

if let pos = myArray.index(of: needle') {
  print("\(needle) is in array at position : \(pos)" 
} else {
  print("It's not in array")
}