繁体   English   中英

在Scala中使用模式匹配在数组中交换值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM