我正在尝试根据第二个数组的内容过滤一个数组。应该对照第二个数组中的所有元素测试第一个数组中的每个元素。
我已经测试了以下内容,并且可以使过滤器仅对所选索引(即0)起作用。
var analysisArray = [String]()
var patternNameArray = [String]()
let filteredArray = analysisArray.filter {$0.isEmpty == false && $0.contains(patternNameArray[0])}
我根据this is
尝试了以下方法let filteredArray = analysisArray.filter {$0.isEmpty == false && $0.contains(where: { patternNameArray.contains($0) })}
但是出现错误“调用中的外部参数标签'where:'”。
如何遍历第二个数组中的所有元素?
答案 0 :(得分:0)
您在 $ 0 上调用函数包含,func是 patternArray 的元素, String 。用于String的contains func的签名是这样的:
public func contains(where predicate: (Character) throws -> Bool) rethrows -> Bool
您正在将其传递给您一个闭包,如果我没看错的话,希望在数组上调用包含。
我认为您只是在闭包中混淆了占位符。如果您想实现我认为的目标,它可能会像这样:
import Foundation
var analysisArray = ["Hello", "Goodbye", "Balloon", "Kite"]
var patternNameArray = ["oo", "ll"]
let filteredArray = analysisArray.filter { analysisString in
analysisString.isEmpty == false &&
patternNameArray.contains { pattern in
analysisString.contains(pattern)
}
}
print(filteredArray) // ["Hello", "Goodbye", "Balloon"]
为了简洁起见,我对其进行了一些扩展(编码时从来都不是一件坏事),以便更清楚地了解在何处使用了哪个闭包变量。这个游乐场的输出是[“ Hello”,“ Goodbye”,“ Balloon”],它是analysisArray中的每个字符串,其中包含patternNameArray中的一个模式。
希望我已经正确阅读了您的问题。