1

我正在尝试为不耐烦的 Scala解决以下问题。问题如下:

使用模式匹配,编写一个函数 swap 交换数组的前两个元素,前提是它的长度至少为两个。

我的解决方案是:

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.....))

有人可以指出这怎么可能。

谢谢

4

1 回答 1

9

您的代码的问题在于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
}
于 2012-05-01T20:27:12.383 回答