Menu
Coddy logo textTech

List, Set, Map の概要

CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 63/110。

Dartは、アプリケーションを構築する際に常に使用する3つの主要なコレクション型を提供します。それぞれが、データの整理やアクセスにおいて異なる目的を果たします。

リストは、要素にインデックスでアクセスする順序付けられたコレクションです。要素は挿入順序を保持し、重複が許可されます:

var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]);      // apple
print(fruits.length);  // 3

Set は、一意の要素の順序付けられていないコレクションです。重複を追加しようとすると、単に無視されます。

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なし*一意のキーキー

これらのコレクションは、ジェネリクスと組み合わせることでさらに強力になります。今後のレッスンでは、独自のクラスで動作する型安全なコレクションを作成するために、ジェネリクスについて詳しく学んでいきます。

challenge icon

チャレンジ

簡単

3つのコレクション型すべてを使用して、生徒のデータをさまざまな方法で整理するクラスルーム管理システムを構築しましょう。同じ情報を管理する際に、List、Set、Mapがそれぞれどのように異なる目的を果たすかを確認できます。

コードを2つのファイルに整理します:

  • classroom.dart: 3つのコレクション型すべてを使用して生徒データを管理する Classroom クラスを作成します:
    • 到着した順序で生徒を追跡するための attendanceOrder という名前の List<String>(生徒が複数回サインインした場合の重複を許可します)
    • どの生徒が出席しているかを追跡するための uniqueStudents という名前の Set<String>(重複なし)
    • 各生徒のテストのスコアを保存するための scores という名前の Map<String, int>
    Classroomクラスには以下のメソッドが必要です:
    • 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);  // 3

Set - ユニークな要素の順序なしコレクションです。重複は自動的に無視されます:

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() を呼び出してクラスルームのデータを表示する
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン