Listの使い方

Scala 3 (Dotty 0.26.0-RC1) 2.13.3 2.12.12
最終更新:2020年5月19日

[AD] scalapediaでは記事作成ボランティアを募集しています

  • Listの使い方を知りたい!

そんな疑問を解消し、Scalaのリストを使えるようになるための記事です。

サンプルコードと出力例を掲載しました。
早速見ていきましょう。

リストの初期化

Listクラスは以下のようにして初期化することができます。

val list = List(1, 2, 3)

追加

リストに追加してみましょう。

val newList = list :+ 4 println(newList)

出力は以下のようになります。

List(1, 2, 3, 4)

結合・連結

リストを結合・連結してみましょう。

val secondList = List(4, 5, 6) val combinedList = list ++ secondList println(combinedList)

出力は以下のようになります。

List(1, 2, 3, 4, 5, 6)

順次処理

リストの各要素を順次処理してみましょう。
副作用を発生させる場合はforeachメソッド、発生させない場合はmapメソッドを使います。

def square(n: Int): Int = n * n
list .map(square) .foreach(println)

出力は以下のようになります。

1 4 9

sort

リストをソートして並び替えてみましょう。

val unorderedList = List(2, 3, 1)
val sortedList = unorderedList.sorted println(sortedList)

出力は以下のようになります。

List(1, 2, 3)

sortBy

単純にソートできないオブジェクトであっても、オブジェクトが持っている値のうちどれに基づいて並べ替えればよいかを指定すれば並べ替えることができます。

case class User(id: Int, name: String) val userList = List(User(2, "Sam"), User(3, "Tim"), User(1, "Bob"), User(4, "Ben"))
val sortedUserList = userList.sortBy(_.id) println(sortedUserList)

出力は以下のようになります。

List(User(1,Bob), User(2,Sam), User(3,Tim), User(4,Ben))

sortWith

あるいは並べ替え方を指定することによっても並べ替えることができます。

case class User(id: Int, name: String) val userList = List(User(2, "Sam"), User(3, "Tim"), User(1, "Bob"), User(4, "Ben"))
val sortedUserList = userList.sortWith((l, r) => l.id < r.id) println(sortedUserList)

出力は以下のようになります。

List(User(1,Bob), User(2,Sam), User(3,Tim), User(4,Ben))

よくある失敗パターンを知っておこう!

末尾にアクセスすると遅い

Listは先頭からの片方向のリスト構造として実装されているため、末尾へのアクセスは遅いです。
したがって、末尾に追加したり末尾の要素を取得したりを繰り返すのはできるだけ避けましょう。

回避する方法としては2つ。

  • 先頭にアクセスして逆順に並べ替える
  • 別の実装(例:mutable.ListBuffer)を使う

Listの内部実装の違いで遅い

先頭へのアクセスが多い場合はList、 ランダムアクセスが多い場合はArraySeq、 両方ある場合はVectorを使ってみましょう。

サイト内検索


カテゴリ「コレクション」の記事


カテゴリ「コレクション」の記事