LoginSignup
1
0

More than 3 years have passed since last update.

リスト, タプルで各要素を取得 scala

Last updated at Posted at 2019-12-28

はじめに

Scalaでタプルの各要素をリストっぽく (要素番号) で取り出そうとした時にエラーでたので少し調べた内容まとめます。

勉強したことを自分の備忘録として残してます。
まだまだ勉強中なので、誤りありましたらご指摘いただければと思います。

リストとタプルの違い

  • リスト
    • 全て同じ型の要素でなければならな
    • (要素番号) で要素を取得
    • 要素番号が 0 始まり
  • タプル
    • 異なった型の要素を持つことができる
    • ._要素番号 で要素を取得
    • 要素番号が 1 始まり

リストで取得

scala> val hoge:List[String] = List("Hello", "World")
hoge: List[String] = List(Hello, World)
scala> println(hoge(0))
Hello

ちなみに、異なる型の要素を持とうとすると Int はあかんと怒られる。
(型を Any ってすれば一応怒られないけど、各要素の型情報が失われるのでダメです!)

scala> val hoge:List[String] = List("Hello", "World", 1)
<console>:11: error: type mismatch;
 found   : Int(1)
 required: String
       val hoge:List[String] = List("Hello", "World", 1)

タプルで取得

scala> val hoge = ("Hello", "World", 1)
hoge: (String, String, Int) = (Hello,World,1)

scala> println(hoge._1)
Hello

scala> println(hoge._3)
1

なぜ?

リストのapplyメソッドが常に同じ型の値を返すのに対して、タプルの各要素は異なる型になっている。
そのため、タプルはメンバにアクセスして取得するのでリストみたいに (要素番号) で取得できない。

ちなみに、タプルの要素番号が 1 始まりなのはHaskellやMLなどの他の言語にからの伝統らしい。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0