如何根据第二个数组的部分或全部内容过滤一个数组

时间:2018-07-31 00:38:10

标签: arrays swift filter

我正在尝试根据第二个数组的内容过滤一个数组。应该对照第二个数组中的所有元素测试第一个数组中的每个元素。

我已经测试了以下内容,并且可以使过滤器仅对所选索引(即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:'”。

如何遍历第二个数组中的所有元素?

1 个答案:

答案 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中的一个模式。

希望我已经正确阅读了您的问题。