sc_*_*ray 1 arrays scala pattern-matching
我试图解决以下问题从Scala不耐烦.问题如下:
使用模式匹配,编写一个函数交换,交换数组的前两个元素,前提是它的长度至少为2.
我的解决方案是:
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
}
Run Code Online (Sandbox Code Playgroud)
我的问题是第一个案例陈述.我认为它会模式匹配,(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
}
Run Code Online (Sandbox Code Playgroud)
但是,我会使用序列匹配语法编写它,_*这样您就不必手动拆分数组:
def f(a: Array[Int]) =
a match {
case Array(x, y, z @ _*) => Array(y, x) ++ z
case _ => a
}
Run Code Online (Sandbox Code Playgroud)