List, Set, Map の概要
CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 63/110。
Dartは、アプリケーションを構築する際に常に使用する3つの主要なコレクション型を提供します。それぞれが、データの整理やアクセスにおいて異なる目的を果たします。
リストは、要素にインデックスでアクセスする順序付けられたコレクションです。要素は挿入順序を保持し、重複が許可されます:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Set は、一意の要素の順序付けられていないコレクションです。重複を追加しようとすると、単に無視されます。
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Mapはキーと値のペアを保持し、関連付けられたキーを使用して値を検索できます。
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30簡単な比較を以下に示します:
| コレクション | 順序 | 重複 | アクセス方法 |
|---|---|---|---|
| List | あり | 許可 | インデックス |
| Set | なし | 不可 | 存在確認 |
| Map | なし* | 一意のキー | キー |
これらのコレクションは、ジェネリクスと組み合わせることでさらに強力になります。今後のレッスンでは、独自のクラスで動作する型安全なコレクションを作成するために、ジェネリクスについて詳しく学んでいきます。
チャレンジ
簡単3つのコレクション型すべてを使用して、生徒のデータをさまざまな方法で整理するクラスルーム管理システムを構築しましょう。同じ情報を管理する際に、List、Set、Mapがそれぞれどのように異なる目的を果たすかを確認できます。
コードを2つのファイルに整理します:
classroom.dart: 3つのコレクション型すべてを使用して生徒データを管理するClassroomクラスを作成します:- 到着した順序で生徒を追跡するための
attendanceOrderという名前のList<String>(生徒が複数回サインインした場合の重複を許可します) - どの生徒が出席しているかを追跡するための
uniqueStudentsという名前のSet<String>(重複なし) - 各生徒のテストのスコアを保存するための
scoresという名前のMap<String, int>
recordArrival(String name)- 出席リスト(attendance list)とユニークな生徒のセット(unique students set)の両方に名前を追加しますsetScore(String name, int score)- マップに生徒のスコアを保存しますprintReport()- クラスルームレポートを出力します(形式は以下に示します)
- 到着した順序で生徒を追跡するための
main.dart: classroomファイルをインポートし、システムを実演します:Classroomインスタンスを作成します- 次の順序で到着を記録します:
'Alice','Bob','Alice','Carol','Bob' - スコアを設定します: Alice =
95, Bob =87, Carol =92 printReport()を呼び出します
printReport() メソッドは次のように出力する必要があります:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Listがすべての到着(重複を含む)を保持し、Setが自動的にユニークな名前のみを保持し、Mapが各生徒をそのスコアに関連付けていることに注目してください。各コレクション型がその目的を完璧に果たしています!
期待される出力:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}チートシート
Dartは、データを整理するための3つの主要なコレクション型を提供しています:
List - インデックスによって要素にアクセスする順序付きコレクションです。重複が許可されます:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Set - ユニークな要素の順序なしコレクションです。重複は自動的に無視されます:
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Map - キーによる検索のためのキーと値のペアを格納します:
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30| コレクション | 順序付け | 重複 | アクセス方法 |
|---|---|---|---|
| List | はい | 許可される | インデックス |
| Set | いいえ | 許可されない | 包含チェック |
| Map | いいえ* | ユニークなキー | キー |
自分で試してみよう
import 'classroom.dart';
void main() {
// TODO: Classroom インスタンスを作成する
// TODO: 次の順序で到着を記録する: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
// TODO: スコアを設定する: Alice = 95, Bob = 87, Carol = 92
// TODO: printReport() を呼び出してクラスルームのデータを表示する
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
4Null Safety
Null Safety 入門Nullable と Non-Nullable? 演算子と ! 演算子late キーワードと Null SafetyNull-Aware 演算子クラスにおける Null Safetyまとめ:ユーザープロフィールシステム10コレクションとジェネリクス
List, Set, Map の概要型安全なコレクションジェネリッククラスジェネリックメソッドジェネリクスの制約Iterable と Iteratorまとめ:ジェネリックなストレージ