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フィードバックを取得できます。ローカル設定は不要です。