检测字符串是否包含字符串数组中的任何元素

11

如何检测一个字符串是否包含一个字符串数组(单词)中的任何成员?

这是字符串数组:

let str:String = "house near the beach"
 let wordGroups:[String] = ["beach","waterfront","with a water view","near ocean","close to water"]
以下代码无法编译。
let match:Bool = wordGroups.contains(where: str.contains)

4
您的代码在我这里编译成功(并返回 true)。您遇到了什么错误? - John Montgomery
调用可能会抛出异常,但没有标记为'try',且错误未处理。此外还有一个解包错误。编译器最终接受了let match:Bool = self.wordGroups.contains(where: (str?.contains)!)。 - user1904273
问题中没有任何需要抛出或解包的内容,因此我认为您的真实代码可能有所不同,问题可能出在其他地方。除非您绝对确定 str 永远不会为空,否则请小心。 - John Montgomery
3个回答

14

我正在使用 String 扩展:

extension String {
    func contains(_ strings: [String]) -> Bool {
        strings.contains { contains($0) }
    }
}

应用案例:

let str = "house near the beach"
let wordGroups = ["beach","waterfront", "with a water view", "near ocean", "close to water"]
let haveWord = str.contains(wordGroups)

10
你可以尝试。
let str = Set("house near the beach")
let match = wordGroups.filter { str.contains($0) }.count != 0

9

除了 @Sh_Khan 的回答之外,如果你想从一组中匹配某些单词:

let str:String = "house near the beach"
let wordGroups:[String] = ["beach","waterfront","with a water view","near ocean","close to water"]
let worlds = wordGroups.flatMap { $0.components(separatedBy: " ")}
let match = worlds.filter { str.range(of:$0) != nil }.count != 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接