セットの作成
CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 18/65。
Setが何であるかを理解したところで、次は作成方法を学びましょう。Dartでは、数学の集合を書くときと同じように、波括弧{}を使用し、要素をカンマで区切ってSetを作成します。
Set<String> colors = {'red', 'blue', 'green'};
print(colors); // {red, blue, green}この構文を Map の作成と混同しないことが重要です。どちらも波括弧を使用しますが、Set には値のみが含まれるのに対し、Map にはコロンで区切られたキーと値のペアが含まれます。空の Set は、空の Map と区別するために、型を明示的に宣言する必要があります。
Set<String> emptySet = <String>{}; // 空のセット
Map<String, int> emptyMap = {}; // 空のマップ重複する値を使用して Set を作成することもできますが、重複は自動的に削除され、最終的なコレクションには一意の要素のみが残ることに注意してください。
チャレンジ
簡単ブログ投稿用のユニークなタグの Set を作成することで、ブログのタグ付けシステムを管理するプログラムを作成してください。プログラムは以下の動作を行う必要があります:
- ブログ投稿のタイトルを表す文字列入力を読み込む
- 投稿に追加するタグを表す複数の文字列入力を読み込む(入力は
"done"を受け取った時点で終了します) - ユニークなタグを格納するための文字列の Set を作成する
- 各タグを Set に追加する(重複は自動的に削除されます)
- 以下の形式でブログのタグ付け結果を出力する
例えば、ブログのタイトルが "Introduction to Dart Programming" で、タグが "programming", "dart", "tutorial", "programming", "beginner" の場合、プログラムは以下のように出力する必要があります:
Blog Post: Introduction to Dart Programming
Tags added: [programming, dart, tutorial, programming, beginner]
Unique tags: {programming, dart, tutorial, beginner}
Total unique tags: 4
Status: Blog post tagged successfullyブログのタイトルが "Web Development Tips" で、タグが "web", "html", "css", "web", "html", "javascript" の場合、プログラムは以下のように出力する必要があります:
Blog Post: Web Development Tips
Tags added: [web, html, css, web, html, javascript]
Unique tags: {web, html, css, javascript}
Total unique tags: 4
Status: Blog post tagged successfullyブログのタイトルが "Getting Started" で、タグが "guide", "basics" の場合、プログラムは以下のように出力する必要があります:
Blog Post: Getting Started
Tags added: [guide, basics]
Unique tags: {guide, basics}
Total unique tags: 2
Status: Blog post tagged successfullyプログラムは波括弧 {} 構文を使用して Set を作成し、Set がどのように重複を自動的に処理するかを示す必要があります。最初に入力されたすべてのタグをリストに保存して、最初に入力された内容を表示し、その後に Set を作成してユニークなタグを表示してください。Set は、波括弧を使用した標準的な Set 形式でその内容を表示する必要があります。
チートシート
波括弧 {} を使用し、要素をカンマで区切って Set を作成します:
Set<String> colors = {'red', 'blue', 'green'};
print(colors); // {red, blue, green}空の Set の場合は、型を明示的に宣言して、空の Map と区別します:
Set<String> emptySet = <String>{}; // 空の Set
Map<String, int> emptyMap = {}; // 空の MapSet は重複する値を自動的に削除し、一意の要素のみを保持します。
自分で試してみよう
import 'dart:io';
void main() {
// ブログ記事のタイトルを読み込む
String? title = stdin.readLineSync();
// "done" が入力されるまでタグを読み込む
List<String> allTags = [];
String? tag;
while ((tag = stdin.readLineSync()) != "done") {
if (tag != null) {
allTags.add(tag);
}
}
// TODO: ここにコードを記述してください
// タグのリストから Set を作成して、重複のないタグを取得する
// 重複のないタグの総数を計算する
// 結果を出力する
print("Blog Post: $title");
print("Tags added: $allTags");
// 重複のないタグを Set 形式で出力する
// 重複のないタグの総数を出力する
// ステータスメッセージを出力する
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
1リスト操作の応用
リストのプロパティ: first と lastリストの状態: isEmpty と isNotEmptyリストの反転リストへの追加: insertリストの削除: removeWhereリスト内の検索: indexOfリストのソートリストのシャッフルまとめ - リストオーガナイザー