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
rubyのnilとは特性が大きく異なる。ただのカラリスト
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]
便利
なんだか気分が乗らないので今日はここまで