Arrays 获取较短版本的for循环?
我正在使用Swift 3.0,并使用以下代码作为字符串类型的扩展来搜索数组中的项: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
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")
}