Scala におけるList の操作
Programming in Scala 第三版16章 リストの操作
言語によっても仕様が異なり混乱しやすいリスト。 Scala における 配列とリストの違いは
- リストはイミュータブルオブジェクトで、リストの要素は代入によって置き換えられない
- 内部的にはLinked List
配列と同じ部分でいうと、Scala におけるArray, List は[T]で示される型のみを格納できる。
// String 型しか格納できない val fruits: List[String] = List("apple", "banana", "cherry") // nums 型しか格納できない。型を省略した場合、型推論でなんとかしてくれる val nums = List(1,2,3,4,5)
中間演算子によるこういう書き方も可能。
この場合 ::
は右結合の演算子なので、() を省略しない場合こういう順番になる
val nums = 1 :: 2 :: 3 :: 4 :: Nil val nums = 1 :: ( 2 :: (3 :: (4 :: Nil)))
リスト同士の連結は
val nums = List(1,2,3,4) ::: List(5,6,7)
この時、もちろん 両項の List[T] 型は一致していなければならない。 この演算子も右結合
パターンマッチによるリストの要素の分解が出来る。
scala > val List(a, b, c) = fruit a: String = apple b: String = banana c:String = cherry
上記構文では、List の要素数が3の型に限られてしまうので、要素数が可変の場合は、 (リストの要素数がわからない場合は)先程の中間演算子を用いるともっとあっさり解決する
scala> val a :: b :: remining = fruit a: String = apple b: String = banana remining:List[String] = List(cherry)