サーチ…


備考

タプルの長さを23に制限するのはなぜですか?

タプルは、コンパイラによってオブジェクトとして書き換えられます。コンパイラはTuple1からTuple22アクセスできます。この任意の制限は、言語設計者によって決定されました。

なぜタプルの長さは0から数えるのですか?

Tuple0Unit相当します。

新しいタプルを作成する

タプルは、2から22の値の異種コレクションです。タプルは、かっこで定義できます。サイズ2タプル(「ペア」とも呼ばれます)には、矢印の構文があります。

scala> val x = (1, "hello") 
x: (Int, String) = (1,hello)
scala> val y = 2 -> "world" 
y: (Int, String) = (2,world)
scala> val z = 3 → "foo"     //example of using U+2192 RIGHTWARD ARROW
z: (Int, String) = (3,foo)

xはサイズ2のタプルです。タプルの要素にアクセスするには、 ._1._22使用します。たとえば、 x._1を使用してxタプルの最初の要素にアクセスできます。 x._2は2番目の要素にアクセスします。もっとエレガントに、 タプル抽出子使うことができます

サイズ2のタプルを作成するための矢印の構文は、主に(key -> value)ペアであるMapで使用され(key -> value)

scala> val m = Map[Int, String](2 -> "world")
m: scala.collection.immutable.Map[Int,String] = Map(2 -> world)

scala> m + x
res0: scala.collection.immutable.Map[Int,String] = Map(2 -> world, 1 -> hello)

scala> (m + x).toList
res1: List[(Int, String)] = List((2,world), (1,hello))

マップ内のペアの構文は矢印の構文で、1がキーで、aがそのキーに関連付けられた値であることがわかります。

コレクション内のタプル

タプルはコレクション内でよく使用されますが、特定の方法で処理する必要があります。たとえば、次のタプルのリストがあるとします。

scala> val l = List(1 -> 2, 2 -> 3, 3 -> 4)
l: List[(Int, Int)] = List((1,2), (2,3), (3,4))

暗黙的なタプル・アンパックを使用して要素を一緒に追加するのは自然なようです。

scala> l.map((e1: Int, e2: Int) => e1 + e2)

ただし、この結果、次のエラーが発生します。

<console>:9: error: type mismatch;
 found   : (Int, Int) => Int
 required: ((Int, Int)) => ?
              l.map((e1: Int, e2: Int) => e1 + e2)

スカラは、この方法でタプルを暗黙的にアンパックすることはできません。この地図を修正するには2つの方法があります。最初に、位置アクセサ_1_2を使用します。

scala> l.map(e => e._1 + e._2)
res1: List[Int] = List(3, 5, 7)

もう1つのオプションは、 case文を使用してパターンマッチングを使用してタプルをアンパックすることです。

scala> l.map{ case (e1: Int, e2: Int) => e1 + e2}
res2: List[Int] = List(3, 5, 7)

これらの制限は、タプルのコレクションに適用される上位関数に適用されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow