【问题标题】: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