首页 > 解决方案 > 列表的Scala匹配模式

问题描述

val res1 = -1
val res2: List[Int] = List.empty
val res3 = -1

经过一些操作,res2可以有多个元素,但是所有的值都必须是-1

如何使用此列表进行模式匹配?

在此之前,什么时候res2Int,我使用了这种模式:

(r1, r2, r3) match {
  case (-1, -1, -1) => Success()
  case _ => throw new Exception("Invalid results")
}

现在我需要类似的东西

(r1, r2, r3) match {
  case (-1, List(-1, -1, ...), -1) => Success()
  case _ => throw new Exception("Invalid results")
}

我知道我可以使用List.forallor List.exists,但这是匹配模式之外的。

更新:我找到了一个很好的解决方案

val r2res = r2.forall(x => x == -1)

 (r1, r2res, r3) match {
   case (-1, true, -1) => Success()
   case _ => throw new Exception("Invalid results")
 }

如果存在直接匹配 res2 结果的方法,请随时发表回复。谢谢

标签: scalapattern-matchingmatch

解决方案


您可以在模式匹配中使用模式防护:

(r1, r2, r3) match {
  case (-1, l:List[Int], -1) if l.forall(_ == -1) => Success()
  case _ => throw new Exception("Invalid results")
}

推荐阅读