在 Scala 中匹配数组

ps0604

在这个示例代码中,我需要打印每个Seq,问题是当我匹配它时,我只有一个变量x而不是数组。如何获取数组?此外,此代码仅打印do nothing两次。

   var seq = Seq(Seq(1,2,3),Seq(4,5,6))
   seq.foreach { seq2 =>
     seq2 match {
       case Seq(x) => println(x)
       case _ => println("do nothing")
     }
   }
安德烈·秋金

如果您有一个 homogeneous Seq[Seq[Int]],则根本不必匹配:

var seq = Seq(Seq(1,2,3),Seq(4,5,6))
seq foreach println

如果您有一系列像这样的混合元素:

var seq = Seq[Any](Seq(1,2,3), 42)

那么你可以匹配 by type Seq,它相当于一个isInstanceOf在这种情况下,您必须_为已擦除的类型添加一个Seq

seq.foreach { seq2 =>
  seq2 match {
    case s: Seq[_] => println(s)
    case _ => println("do nothing")
  }
}

您应该避免使用第二种变体。最好使用案例类创建自定义密封特征并正确进行模式匹配:

sealed trait ValidSeqContent
case class IntInSeq(i: Int) extends ValidSeqContent
case class SeqOfIntsInSeq(seq: Seq[Int]) extends ValidSeqContent

val seq: Seq[ValidSeqContent] = Seq(
  SeqOfIntsInSeq(Seq(1,2,3)),
  IntInSeq(42)
)

然后你可以在没有isInstanceOf类似匹配的情况下进行模式匹配

seq.foreach{ x =>
  x match {
    case SeqOfIntsInSeq(s) => println(s)
    case _ => { /* do nothing */ }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章