【问题标题】:Using Scala pattern matching to find whether a List contains a value使用 Scala 模式匹配来查找 List 是否包含值
【发布时间】:2014-07-19 12:23:06
【问题描述】:

我已经看到了一系列不同的匹配,您可以使用模式匹配对 List 进行匹配。是否可以使用模式匹配来识别列表中是否有任何(理想情况下是哪个)元素包含值 x?所以是这样的:

def contains(text: List[Char], chr: Char): Boolean = text match{
  case *pattern matching chr to any value in text* => true
  case _ => false
}

只是想了解它能做什么,不能做什么。

(我知道我可以使用 text.contains(chr),顺便说一句)

谢谢, 彼得

【问题讨论】:

    标签: scala pattern-matching match


    【解决方案1】:

    我所看到的是使用列表上的匹配来递归,在你的情况下可能是这样的:

    def contains(text: List[Char], chr: Char): Boolean = text match{
      case head :: tail  => head.equals(chr) || contains(tail, chr)
      case Nil => false
    }
    

    我不认为你可以使用匹配来做这种操作,因为列表的unapply方法是如何定义的,理论上如果你知道列表的长度你可以写类似

    case x1 :: x2 :: x3 // and so on
    

    但我想你可以自己看到,这对于参数匹配来说既不实用也不理想。

    【讨论】:

      【解决方案2】:

      不确定是否是您要查找的内容,但您可以将 if 表达式放入模式匹配中。

      这段代码看起来很假,但它演示了如何将contains 或其他随机函数放入模式匹配中。

      scala> def contains(text: List[Char], chr: Char): Boolean = text match{
           |     case _ if text.contains(chr) => true
           |     case _ => false
           | }
      contains: (text: List[Char], chr: Char)Boolean
      
      scala> contains(List('a', 'b', 'c'), 'd')
      res2: Boolean = false
      
      scala> contains(List('a', 'b', 'c'), 'c')
      res3: Boolean = true
      

      【讨论】:

        猜你喜欢
        • 2017-03-28
        • 2016-05-12
        • 2018-02-11
        • 1970-01-01
        • 2022-01-09
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        • 2021-08-10
        相关资源
        最近更新 更多