特に要素が2つの Pair はさまざまな時に使うと思う。なんで Java に Pair がなかったのだろう。
このように、括弧で複数の値をくくると、Tuple オブジェクトが作成される。
val t1 = ("a" , 1); println(t1.getClass().getName())
scala.Tuple2
値の型は何でもよい。値の数に応じて専用のクラスが用意されている。
val t1 = ("a" , 1, 1.0, 1.0f, true ); println(t1.getClass().getName())
scala.Tuple5
Tupleクラスは Tuple22 まである。つまり、値の数は22個まで。
val t1 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3);
object Tuple23 is not a member of package scala
Tuple2 と Tuple3 は別名があり、それぞれ Pair()、Tritle() で値を生成できる。
Tuple2では -> 演算子でも生成できる。
val t1 = Pair("a" , 1); println(t1.getClass().getName()) val t2 = "a" -> 1; println(t2.getClass().getName())
scala.Tuple2
Mapは Tuple2(Pair) を複数受け取って生成することができるので、この「->」で書くと直感的にかける。以下の場合、後者のほうがキーと Value で Map を作っている感じがする(気のせい?)
val map1 : Map[String, Int] = Map( Pair("a", 1), Pair("b", 2) ); val map2 : Map[String, Int] = Map( "a" -> 1, "b" -> 2 );
Tuple の生成方法まとめ。
- Tuple2
(x1, x2)、 x1 -> x2、 Pair(x1, x2)、 Tuple2(x1, x2) - Tuple3
(x1, x2, x3)、 Triple(x1, x2, x3)、 Tuple3(x1, x2, x3) - Tuple4 (およびそれ以降)
(x1, x2, x3、x4)、 Tuple4(x1, x2, x3, x4)
値取り出し
Tuple は型パラメータを持ち、各値毎に型が決定されている。
val t : Pair[String, Int] = ("abc", 1); val v1 : String = t._1; val v2 : Int = t._2;
値の取得は「_1」、「_2」、... で取得できる。生成時に各値の型が決まっているので、 「_1」、「_2」の返す型も静的に決定されている。
各要素の型が違うため Collection 系のような各要素に一括して何かの処理を行うような機能は Tuple には用意されていない。
0 件のコメント:
コメントを投稿