【问题标题】:Detect if string contains any element of a string array检测字符串是否包含字符串数组的任何元素
【发布时间】:2019-03-13 15:25:58
【问题描述】:

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

这是数组:

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)

【问题讨论】:

  • 您的代码为我编译(并返回true)。你遇到了什么错误?
  • '调用可以抛出但它没有标记'try'并且错误没有被处理'加上一个展开错误。编译器最终接受了let match:Bool = self.wordGroups.contains(其中: (str?.contains)!)
  • 问题中没有应该抛出或需要解包的内容,所以我认为您的真实代码有点不同,问题出在其他地方。请小心,除非您绝对 100% 确定 str 永远不会为零。

标签: arrays swift string


【解决方案1】:

你可以试试

let str = Set("house near the beach")
let match = wordGroups.filter { str.contains($0) }.count != 0

【讨论】:

    【解决方案2】:

    除了@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
    

    【讨论】:

      【解决方案3】:

      我正在使用 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)
      

      【讨论】:

        猜你喜欢
        • 2013-09-27
        • 2011-12-23
        • 2013-10-03
        • 2012-02-18
        • 2015-09-08
        • 2016-09-22
        • 2021-05-02
        • 1970-01-01
        相关资源
        最近更新 更多