第十章Scala容器基礎(二十七):元組
2918 ワード
Problem
集合要素のタイプが多様な集合を作成します.
Solution
メタグループは、コンテナ内に異なるタイプの要素を格納する方法を提供します.これは多くの場合に非常に役立ちます.
新しい元祖は、必要な額のグループを括弧のグループに包むことによって作成されます.次は二元祖です.
2つの異なるタイプが含まれていることに注意してください.次の例では、三元祖を示します.
下付き文字を使用して、メタグループ要素にアクセスできます.
通常、パターンマッチングによって元祖要素を変数にコピーします.
このソリューションにはもう一つの素晴らしいメリットがあります.要素が必要でなければ、使用できます.この要素の代わりにワイルドカードを使用します.
二元祖はTuple 2 classの例であり、三元祖はTuple 3 classの例である.次に、二元祖を作成する最も簡単な方法を示します.
次の方法でメタグループを作成することもできます.
彼らのタイプを見ると、彼らはすべてTople 2であることがわかります.
この構文は、Mapを作成するためにも使用できます.
Discussion
メタグループはとても面白い構造です.しかし、要素メタグループは存在しません.APIではtupleクラスがTouple 2からTouple 22まで定義されており、1つの場所に2元から22元のメタグループを持つことができます.
メタグループの一般的な状況の1つは、メソッドが複数の結果を返すことです.この場合、集合ではなく戻り値としてメタグループが使用されます.tupleは集合ではありませんが、メタグループを集合として使用することができます.
iteratorを使用してメタグループを巡回し、一度使用した後は使用できません.このメタグループを再び巡回する必要がある場合は、新しいiteratorを構築して使用する必要があります.
メタグループをセットに変換することもできます.
集合要素のタイプが多様な集合を作成します.
Solution
メタグループは、コンテナ内に異なるタイプの要素を格納する方法を提供します.これは多くの場合に非常に役立ちます.
新しい元祖は、必要な額のグループを括弧のグループに包むことによって作成されます.次は二元祖です.
scala> val d = ("Debi", 95)
d: (String, Int) = (Debi,95)
2つの異なるタイプが含まれていることに注意してください.次の例では、三元祖を示します.
scala> val t = (3, "three", new Person("Al"))
t: (Int, String, Person) = (3,three,Person(Al))
下付き文字を使用して、メタグループ要素にアクセスできます.
scala> t._1
res0: Int = 3
scala> t._2
res1: String = three
scala> t._3
res2: Person = Person(Al)
通常、パターンマッチングによって元祖要素を変数にコピーします.
scala> val (x, y, z) = (3, "three", new Person("Al"))
x: Int = 3
y: String = three
z: Person = Person(Al)
このソリューションにはもう一つの素晴らしいメリットがあります.要素が必要でなければ、使用できます.この要素の代わりにワイルドカードを使用します.
scala> val (x, y, _) = (3, "three", new Person("Al"))
x: Int = 3
y: String = three
scala> val (x, _, _) = (3, "three", new Person("Al"))
x: Int = 3
scala> val (x, _, z) = (3, "three", new Person("Al"))
x: Int = 3
z: Person = Person(Al)
二元祖はTuple 2 classの例であり、三元祖はTuple 3 classの例である.次に、二元祖を作成する最も簡単な方法を示します.
scala> val a = ("AL", "Alabama")
a: (String, String) = (AL,Alabama)
次の方法でメタグループを作成することもできます.
scala> val b = "AL" -> "Alabama"
b: (String, String) = (AL,Alabama)
scala> val c = ("AL" -> "Alabama")
c: (String, String) = (AL,Alabama)
彼らのタイプを見ると、彼らはすべてTople 2であることがわかります.
scala> a.getClass
res6: Class[_ <: (String, String)] = class scala.Tuple2
scala> b.getClass
res7: Class[_ <: (String, String)] = class scala.Tuple2
scala> c.getClass
res8: Class[_ <: (String, String)] = class scala.Tuple2
この構文は、Mapを作成するためにも使用できます.
scala> val map = Map("AL" -> "Alabama")
map: scala.collection.immutable.Map[String,String] = Map(AL -> Alabama)
Discussion
メタグループはとても面白い構造です.しかし、要素メタグループは存在しません.APIではtupleクラスがTouple 2からTouple 22まで定義されており、1つの場所に2元から22元のメタグループを持つことができます.
メタグループの一般的な状況の1つは、メソッドが複数の結果を返すことです.この場合、集合ではなく戻り値としてメタグループが使用されます.tupleは集合ではありませんが、メタグループを集合として使用することができます.
scala> val x = ("AL" -> "Alabama")
x: (String, String) = (AL,Alabama)
scala> val it = x.productIterator
it: Iterator[Any] = non-empty iterator
scala> for (e <- it) println(e)
AL
Alabama
iteratorを使用してメタグループを巡回し、一度使用した後は使用できません.このメタグループを再び巡回する必要がある場合は、新しいiteratorを構築して使用する必要があります.
メタグループをセットに変換することもできます.
scala> val t = ("AL", "Alabama")
t: (String, String) = (AL,Alabama)
scala> t.productIterator.toVector
res13: Vector[Any] = Vector(AL, Alabama)