コマンドプロンプトで試した結果です。
::
Listは、「::」クラスで次がNilまでのデータを紐づけていきます。
[ List(1,2,3,4,5) = 1::2::3::4::5 ]
scala> List(1,2,3,4,5)
res__: List[Int] = List(1, 2, 3, 4, 5)
scala> 1::2::3::4::5::Nil
res__: List[Int] = List(1, 2, 3, 4, 5)
型指定
Scalaは型推論で自動で設定してくれますが、型を指定してやらないといけない場合もあります。
Listのパラメータに1つ違った型を設定する時などは忘れないように型指定した方が良い。
scala> List(1,1)
res__: List[Int] = List(1, 1)
scala> List(1,1.0,-0.1)
res__: List[Double] = List(1.0, 1.0, -0.1)
scala> List[java.lang.Number](1,1.0,-0.1)
res__: List[Number] = List(1, 1.0, -0.1)
結合
「::」を使うとリストの結合も行えます。
scala> val acha = List(2,3,4)
acha: List[Int] = List(2, 3, 4)
scala> val porute = 0 :: 1 :: acha
porute: List[Int] = List(0, 1, 2, 3, 4)
scala> val piipo = acha :: 5 :: Nil
piipo: List[Any] = List(List(2, 3, 4), 5)
後ろに繋げるとListの2次元になりました。
scala> piipo(0)
res__: Any = List(2, 3, 4)
scala> piipo(1)
res__: Any = 5
「_」:要素を指定
リスト内の要素を指定する時、「_」で置き換えることが出来ます。(…Perlみたい)
scala> List(1,2,3).filter(a => a % 2 == 1 )
res__: List[Int] = List(1, 3)
scala> List(1,2,3).filter(_ % 2== 1)
res__: List[Int] = List(1, 3)
メソッドを指定
メソッドを使用して条件を置き換えることもできます。
scala> def odd(a: Int) = a % 2 == 1
odd: (a: Int)Boolean
scala> List(1,2,3).filter( odd )
res__: List[Int] = List(1, 3)
変換
「map」、「sort」、「reduceLeft」、「foldLeft」...よく使いそうなやつ
◆各要素に対して処理した場合は「map」
scala> List("Acha","PORUTE","piiPo").map(_.toLowerCase)
res__: List[String] = List(acha, porute, piipo)
scala> List("Acha","PORUTE","piiPo").map(_.toUpperCase)
res__: List[String] = List(ACHA, PORUTE, PIIPO)
scala> List("Acha","PORUTE","piiPo").map(_.length)
res__: List[Int] = List(4, 6, 5)
◆並び替えは「sortWith」
scala> List("Acha","PORUTE","piiPo").sortWith(_ > _)
res__: List[String] = List(piiPo, PORUTE, Acha)
scala> List("Acha","PORUTE","piiPo").sortWith(_.length > _.length)
res__: List[String] = List(PORUTE, piiPo, Acha)
scala> List(2,5,1,33,8,42).sortWith( _ > _ )
res__: List[Int] = List(42, 33, 8, 5, 2, 1)
◆条件に合う項目を抽出「filter」
scala> List("Acha","PORUTE","piiPo").filter( _ == "Acha")
res6: List[String] = List(Acha)
◆要素数
scala> List("Acha","PORUTE","piiPo").length
res__: Int = 3
scala> List("Acha","PORUTE","piiPo").size
res__: Int = 3
◆Nilチェック
scala> List("Acha","PORUTE","piiPo").isEmpty
res__: Boolean = false
scala> List().isEmpty
res__: Boolean = true
◆条件に合う要素の数
scala> List("Acha","PORUTE","piiPo").count( _.length > 5 )
res__: Int = 1
scala> List("Acha","PORUTE","piiPo").count( _.length > 3 )
res__: Int = 3
scala> List(2,5,1,33,8,42).count( _ > 10 )
res__: Int = 2
◆条件に合う配列のIndex
scala> List("Acha","PORUTE","piiPo").indexWhere( _.toLowerCase == "porute")
res__: Int = 1
scala> List(2,5,1,33,8,42).indexWhere( _ > 32 )
res__: Int = 3
◆要素の演算(foldLeft横の()は初期値)
scala> List(1,2,3,4,5).foldLeft(0)( _ + _ )
res__: Int = 15
scala> List(1,2,3,4,5).foldLeft(1)( _ * _ )
res__: Int = 120
scala> List(1,2,3,4,5).foldLeft(0)( _ * _ )
res__: Int = 0