1

せっかちな人のために、Scalaから次の問題を解決しようとしています。質問は次のとおりです。

パターン マッチングを使用して、長さが 2 以上の配列の最初の 2 つの要素を交換する関数 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)「1要素配列に一致する」ことを意味することです。必要なのは、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 に答える