Listのメソッド
基本操作
val list = List(1,2,3) // 生成 val list = List.range(1,4) // 生成 List(1,2,3) val list = List(1 to 3: _*) // 生成 List(1,2,3) val list = List.empty // 空リストの生成 0 +: list // 先頭に要素を追加 List(0,1,2,3) 0 :: list // 上と同じ list :+ 4 // 最後に要素を追加 List(1,2,3,4) list ++ List(4,5,6) // リスト同士の結合 List(1,2,3,4,5,6) list ::: List(4,5,6) // 上と同じ list.length // 要素の長さを得る 3 list.size // 上と同じ list(2) // 要素の取得 3 list.apply(2) // 上と同じ list.head // 先頭要素の取得 1 list.last // 最終要素の取得 3 list.init // 最終要素を除くリスト List(1,2) list.tail // 先頭要素を除くリスト List(2,3) list.max // 最大要素の取得 3 list.min // 最小要素の取得 1 List(1,2,3,4,5).sum // 要素の合計 15 (1+2+3+4+5) List(1,2,3,4,5).product // 要素の積 120 (1*2*3*4*5) list.isEmpty // 要素が空かどうか false list.nonEmpty // 要素が空でないかどうか true list.contains(2) // 含むかどうか true list.indexOf(2) // 要素2が何番目にあるか 1 List(1,2,3,2,1).lastIndexOf(2) // 要素2が最後から数えて何番目にあるか 3 List(2,1,5,4,3).sorted // 並び替え List(1,2,3,4,5) list.reverse // 逆順で並び替え List(3,2,1) List(1,2,2,5,4,5).distinct // 重複を除く List(1,2,5,4) List(1,2,3,4,5,6).slice(2,4) // 部分リストの取得 List(3,4) List(1,2,3,4).splitAt(2) // 添字2で分割しタプルを返す (List(1,2), List(3,4) List(1,2,3,4,5).mkString(":") // 連結 "1:2:3:4:5"
より高度な操作
// 関数実行結果がtrueな最初の要素を得る Some(3) List(1,2,3,4,5).find(_ > 2) // 関数実行結果がtrueなもののみフィルタ List(1,2,3,4,5,6).filter(_ % 2 == 0) // List(2,4,6) // 関数実行結果がfalseなもののみフィルタ List(1,2,3,4,5,6).filterNot(_ % 2 == 0) // List(1,3,5) // 全要素への関数適用(2倍) List(1,2,3,4).map(_ * 2) // List(2,4,6,8) // filterとmapの組み合わせ List(4,8) List(1,2,3,4).collect { case x if (x % 2 == 0) => x * 2 } // 要素に対して関数を適用し返ってきたコレクションを連結する List(1,2,3,4).flatMap(1 to _) // List(1,1,2,1,2,3,1,2,3,4) // 先頭2要素のみ取り出したリストを返す List(1,2,3,4,5).take(2) // List(1,2) // 後方2要素のみ取り出したリストを返す List(1,2,3,4,5).takeRight(2) // List(4,5) // 先頭2要素を除いたリストを返す List(1,2,3,4,5).drop(2) // List(3,4,5) // 後方2要素を除いたリストを返す List(1,2,3,4,5).dropRight(2) // List(1,2,3) // 要素ごとに関数を適用しresultに格納 List(1,2,3,4).reduceLeft((result,a) => result + a) // 10 (1+2+3+4) // reduceLeftのresultに初期値を与える List(1,2,3,4).foldLeft(10)((result,a) => result + a) // 20 (10+1+2+3+4) // foldLeftの演算途中結果のコレクションを返す List(1,2,3,4).scanLeft(10)((result,a) => result + a) // List(10, 11, 13, 16, 20) // 関数適用してtrueなものがあるかどうか List(1,2,3,4,5).exists(_ > 4) // true // 全要素が関数実行結果がtrueかどうか List(1,2,3,4,5).forall(_ > 0) // true // 要素に対する関数実行のtrue/falseで分けたタプルを返す List(1,2,3,4,5).partition(_ > 2) // (List(3,4,5), List(1,2)) // 2ずつ移動したListのIteratorを返す for(x <- List(1,2,3,4,5).grouped(2)) println(x) // List(1,2) // List(3,4) // List(5) // 2ずつ移動したListのIteratorを返す for(x <- List(1,2,3,4,5).sliding(2)) println(x) // List(1,2) // List(2,3) // List(3,4) // List(4,5) // 戻り値をキーにMapを生成 Map(even->List(2,4,6), odd->List(1,3,5) List(1,2,3,4,5,6).groupBy { case x if (x % 2 == 0) => "even" case _ => "odd" }