bussorenre Laboratory

bussorenre Laboratory

Scala におけるList の操作

Programming in Scala 第三版16章 リストの操作

言語によっても仕様が異なり混乱しやすいリスト。 Scala における 配列とリストの違いは

  1. リストはイミュータブルオブジェクトで、リストの要素は代入によって置き換えられない
  2. 内部的には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)