0Pricing
Scala for Backend Engineering & Functional Programming · レッスン

List、Vector、Set、Map

コアコレクションです。

「List、Vector、Set、Map」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。

Scalaの基本コレクション

Scalaの標準ライブラリには、複数のイミュータブルなコレクションがあります。特によく使う4つはList、Vector、Set、Mapです。それぞれ性能とセマンティクスが異なります。

object Main {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3)
    val vector = Vector(1, 2, 3)
    val set = Set(1, 2, 3)
    val map = Map("a" -> 1, "b" -> 2)
    println(list)
    println(vector)
    println(set)
    println(map)
  }
}

List:連結リスト

Listは単方向連結リストです。::による先頭への追加はO(1)で高速ですが、ランダムアクセスと末尾への追加はO(n)です。再帰処理やスタックのような用途に適しています。

object Main {
  def main(args: Array[String]): Unit = {
    val xs = List(2, 3, 4)
    val prepended = 1 :: xs
    println(prepended)
    println("head: " + xs.head)
    println("tail: " + xs.tail)
  }
}

Vector:バランスの取れた汎用型

Vectorはインデックス付きシーケンスで、アクセス、更新、先頭への追加、末尾への追加が実質的にすべてO(1)です。高速なランダムアクセスや汎用的なシーケンスが必要な場合は、ListよりVectorを優先してください。

object Main {
  def main(args: Array[String]): Unit = {
    val v = Vector(10, 20, 30, 40)
    println(v(2))
    val updated = v.updated(0, 99)
    println(updated)
    println(v :+ 50)
  }
}

Set:重複しない要素

Setは、重複のない一意な要素を保持し、順序は保証されません。containsによるメンバーシップテストは高速です。

object Main {
  def main(args: Array[String]): Unit = {
    val s = Set(1, 2, 2, 3, 3, 3)
    println(s)
    println(s.contains(2))
    println(s + 4)
    println(s - 1)
  }
}

Setの操作

Setは数学的な操作をサポートします。union(|)、intersect(&)、diff(−−)などです。

object Main {
  def main(args: Array[String]): Unit = {
    val a = Set(1, 2, 3)
    val b = Set(2, 3, 4)
    println(a union b)
    println(a intersect b)
    println(a diff b)
  }
}

Map:キーと値のペア

Mapはキーと値を対応付けます。キーは一意です。->矢印でエントリを作成し、get(Optionを返します)またはapplyで値を検索します。

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Ann" -> 30, "Bob" -> 25)
    println(ages("Ann"))
    println(ages.get("Cara"))
    println(ages.getOrElse("Cara", 0))
  }
}

Mapをイミュータブルに更新する

イミュータブルなMapでは、エントリを追加または削除すると新しいMapが返され、元のMapは変更されません。追加または上書きには+を、削除には-を使います。

object Main {
  def main(args: Array[String]): Unit = {
    val m = Map("a" -> 1)
    val m2 = m + ("b" -> 2)
    val m3 = m2 - "a"
    println(m)
    println(m2)
    println(m3)
  }
}

Mapを反復する

Mapを反復すると、キーと値のタプルが得られます。for内包表記やパターンマッチングで直接分解できます。

object Main {
  def main(args: Array[String]): Unit = {
    val scores = Map("math" -> 90, "art" -> 75)
    for ((subject, score) <- scores) {
      println(s"$subject: $score")
    }
  }
}

すべてに共通するメソッド

これらのコレクションには、size、isEmpty、map、filter、foreachなど、共通する大規模なAPIがあります。APIを一度学べば、どのコレクションにも適用できます。

object Main {
  def main(args: Array[String]): Unit = {
    println(List(1, 2, 3).map(_ * 2))
    println(Vector(1, 2, 3).map(_ * 2))
    println(Set(1, 2, 3).map(_ * 2))
  }
}

コレクション間の変換

toList、toVector、toSet、toMapなどの変換メソッドを使うと、型を簡単に切り替えられます。Setに変換すると重複が削除されます。

object Main {
  def main(args: Array[String]): Unit = {
    val withDupes = List(1, 1, 2, 3, 3)
    println(withDupes.toSet)
    val pairs = List(("a", 1), ("b", 2))
    println(pairs.toMap)
  }
}

適切なコレクションを選ぶ

簡単な指針:

  • List — 再帰、先頭への高速な追加、先頭と末尾を使った処理
  • Vector — 汎用用途、高速なインデックスアクセス
  • Set — 一意性とメンバーシップテスト
  • Map — キーによる検索
object Main {
  def main(args: Array[String]): Unit = {
    val ids = List(5, 3, 5, 1, 3)
    val unique = ids.toSet
    val indexed = ids.toVector
    println(s"unique count: ${unique.size}")
    println(s"third element: ${indexed(2)}")
  }
}

クイックチェック

重複する要素を自動的に削除するコレクションはどれですか?

まとめ

Scalaの基本的なイミュータブルコレクションについて学びました。

  • List — 連結リスト、先頭への追加が高速
  • Vector — インデックス付きで、バランスのよい性能
  • Set — 集合演算を備えた一意な要素の集合
  • Map — get/getOrElseによるキーと値の検索

これらは豊富な共通APIを持ち、互いに簡単に変換できます。

よくある質問

「List、Vector、Set、Map」レッスンは無料ですか?

はい。「List、Vector、Set、Map」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。

「List、Vector、Set、Map」で何を学びますか?

コアコレクションです。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「List、Vector、Set、Map」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?

はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. List、Vector、Set、Map
  2. 変換
  3. 畳み込みと削減
  4. グループ化とソート
← Scala for Backend Engineering & Functional Programmingに戻る