[英]Swapping values in an array using Pattern Matching in Scala
我正试图解决Scala急于解决的以下问题。 问题如下:
使用模式匹配,编写一个函数交换,只要它的长度至少为两个,就可以交换数组的前两个元素。
我的解决方案是:
def swap(sArr:Array[Int]) = sArr.splitAt(2) match {
case (Array(x,y),Array(z)) => Array(y,x,z)
case (Array(x,y),Array()) => Array(y,x)
case _ => sArr
}
我的问题在于第一个案例陈述。 我认为它将模式匹配(Array(1,2),Array(3))
而我打算将其模式匹配(Array(1,2),Array(3,4,5.....))
有人可以指出这是怎么可能的。
谢谢
您的代码的问题在于Array(z)
意思是“匹配一个元素数组”。 您想要的是z
成为整个数组,无论有多少元素:
def swap(sArr: Array[Int]) =
sArr.splitAt(2) match {
case (Array(x, y), z) => Array(y, x) ++ z
case _ => sArr
}
但是,我将使用序列匹配语法_*
编写它,这样您就不必手动拆分数组:
def f(a: Array[Int]) =
a match {
case Array(x, y, z @ _*) => Array(y, x) ++ z
case _ => a
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.