5

このコレクションがあるとしましょう:

val a = Array(Array(1,2,3,4,5),Array(4,5),Array(5),Array(1,2,6,7,8))

次のように機能するエクストラクタを定義する方法はありますか:

a.foreach(e => {
   e match {
      case Array( ending with 5 ) => 
      case _ =>
   }
})

疑似コードで申し訳ありませんが、それを表現する方法がわかりません。最後の要素として 5 を持つものと一致させる方法はありますか? 最初の要素が 1 で最後の要素が 5 の何かに一致させたい場合はどうすればよいでしょうか? これは、さまざまな長さの配列で機能しますか (例では、配列に異なる長さを具体的に選択したことに注意してください)。

ありがとう!

4

4 に答える 4

9
a.foreach(e => {
   e match {
      case a: Array[Int] if a.last == 5 => 
      case _ =>
   }
})

最初の要素を一致させるために、もう少し良いことができます。

a.foreach(e => {
   e match {
      case Array(1, _*) => 
      case _ => 
   }
})

残念ながら、それ@_*は配列引数のリストの最後の項目でなければなりません。ただし、その前のマッチングを必要に応じて複雑にすることができます。

scala> val Array(1, x @_*) = Array(1,2,3,4,5)
x: Seq[Int] = Vector(2, 3, 4, 5)

scala> val Array(1, b, 3, x @_*) = Array(1,2,3,4,5)
b: Int = 2
x: Seq[Int] = Vector(4, 5)
于 2011-07-15T20:05:24.980 に答える
4

case構文はifsをサポートしているため、これは機能します。

a foreach {
  case a: Array[Int] if a.last == 5 =>
  case _ =>
}
于 2011-07-15T20:10:09.440 に答える
1
a.foreach (ar => ar.last match {                    
  case 5 => println ("-> 5] " + ar.mkString ("~"))
  case _ => println ("   ?] " + ar.mkString (":")) }) 

最後の要素を直接一致させてみませんか?

-> 5] 1~2~3~4~5
-> 5] 4~5
-> 5] 5
   ?] 1:2:6:7:8
于 2011-07-15T23:07:44.070 に答える