See the Elephant

1992生まれのプログラマが書くエンジニアブログ

scalaのコレクションライブラリについて 前編

scalaのコレクションは mutableとimmutableがある

immutableは安全で気にすることが減る scalaではあまりarrayを使わないらしい

Listはimmutable

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

scala> lst(0) = 1
       ^
       error: value update is not a member of List[Int]
       did you mean updated?

scalaの空リストはNil

rubynilとは特性が大きく異なる。ただのカラリスト
Nilはコンス :: と合わせて使うことが多い

scala> val a1 = 1 :: Nil
a1: List[Int] = List(1)

scala> val a2 = 2 :: a1
a2: List[Int] = List(2, 1)

scala> val a3 = 3 :: a2
a3: List[Int] = List(3, 2, 1)

なるほど、concatとかmergeとかそういうやつか コンスは特殊な関数だそう

scala> 1 :: 2 :: 3 :: 4 :: Nil
res13: List[Int] = List(1, 2, 3, 4)
scala> Nil.::(4).::(3).::(2).::(1)
res14: List[Int] = List(1, 2, 3, 4)

昔、フォールドライトとかフォールドレフトとかやったな

実行順序が記述順序と違うらしい リストの連結

scala> List(1, 2) ++ List(3, 4)
res15: List[Int] = List(1, 2, 3, 4)

++ で書くと繋がる + ではないんだね

mkString:文字列のフォーマッティング

非常によく利用されるらしい

scala> val arr = Array(1,2,3,4,5)
arr: Array[Int] = Array(1, 2, 3, 4, 5)

scala> arr.mkString
res10: String = 12345

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

scala> l.mkString
res11: String = 12345
mkString() と呼び出すとこける
scala> l.mkString()
         ^
       error: overloaded method value mkString with alternatives:
         => String <and>
         (sep: String)String <and>
         (start: String,sep: String,end: String)String
        cannot be applied to ()

セパレータの宣言ができる

scala> l.mkString(":")
res13: String = 1:2:3:4:5

scala> l.mkString("[", ",", "]")
res14: String = [1,2,3,4,5]

便利

なんだか気分が乗らないので今日はここまで