まとめ:重複のないゲストリスト
CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 25/65。
チャレンジ
簡単2つの異なる招待元からのゲストリストを分析して、イベント計画システムを管理するプログラムを作成してください。プログラムは以下の手順を実行する必要があります:
- イベント名を表す文字列入力を読み込む
- 最初の招待リストのゲストを表す複数の文字列入力を読み込む(入力は
"list1_done"を受け取った時点で終了します) - 2番目の招待リストのゲストを表す複数の文字列入力を読み込む(入力は
"list2_done"を受け取った時点で終了します) - 各リスト内の重複を自動的に処理するために、両方のゲストリストを Set に変換する
union()メソッドを使用して、イベントに招待されたすべてのユニークなゲストを見つけるintersection()メソッドを使用して、両方の招待リストに含まれているゲストを見つけるdifference()メソッドを使用して、最初の招待リストにのみ含まれているゲストを見つける- 以下の形式でゲストリストの分析結果を出力する
例えば、イベント名が "Birthday Party" で、最初のリストに "Alice", "Bob", "Charlie", "Diana" が含まれ、2番目のリストに "Bob", "Diana", "Eve", "Frank" が含まれる場合、プログラムは以下のように出力する必要があります:
Event: Birthday Party
First invitation list: {Alice, Bob, Charlie, Diana}
Second invitation list: {Bob, Diana, Eve, Frank}
All unique guests: {Alice, Bob, Charlie, Diana, Eve, Frank}
Guests on both lists: {Bob, Diana}
Guests only on first list: {Alice, Charlie}
Total unique guests: 6
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completedイベント名が "Wedding Reception" で、最初のリストに "John", "Mary", "Sarah" が含まれ、2番目のリストに "Tom", "Lisa", "Mike" が含まれる場合、プログラムは以下のように出力する必要があります:
Event: Wedding Reception
First invitation list: {John, Mary, Sarah}
Second invitation list: {Tom, Lisa, Mike}
All unique guests: {John, Mary, Sarah, Tom, Lisa, Mike}
Guests on both lists: {}
Guests only on first list: {John, Mary, Sarah}
Total unique guests: 6
Duplicate invitations: 0
First list only: 3
Status: Guest list analysis completedイベント名が "Company Meeting" で、最初のリストに "Alex", "Jordan", "Taylor", "Morgan", "Alex" が含まれ、2番目のリストに "Jordan", "Taylor", "Casey", "Jordan" が含まれる場合、プログラムは以下のように出力する必要があります:
Event: Company Meeting
First invitation list: {Alex, Jordan, Taylor, Morgan}
Second invitation list: {Jordan, Taylor, Casey}
All unique guests: {Alex, Jordan, Taylor, Morgan, Casey}
Guests on both lists: {Jordan, Taylor}
Guests only on first list: {Alex, Morgan}
Total unique guests: 5
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completedプログラムでは、3つのセット操作すべてを使用する必要があります。すべてのゲストを統合するための union()、両方のリストに現れるゲストを見つけるための intersection()、そして最初のリストにのみ存在するゲストを見つけるための difference() です。個別のリスト内の重複を処理するために、まず入力リストを Set に変換し、それからセット操作を実行してゲストの分布を分析してください。
自分で試してみよう
import 'dart:io';
void main() {
// イベント名を読み込む
String? eventName = stdin.readLineSync();
// 1つ目の招待リストを読み込む
List<String> firstList = [];
String? input;
while ((input = stdin.readLineSync()) != "list1_done") {
if (input != null) {
firstList.add(input);
}
}
// 2つ目の招待リストを読み込む
List<String> secondList = [];
while ((input = stdin.readLineSync()) != "list2_done") {
if (input != null) {
secondList.add(input);
}
}
// リストをセットに変換する
Set<String> firstSet = firstList.toSet();
Set<String> secondSet = secondList.toSet();
// TODO: 以下にコードを記述してください
// union()、intersection()、difference() メソッドを使用してゲストリストを分析します
// すべてのユニークなゲスト、両方のリストに載っているゲスト、1つ目のリストにのみ載っているゲストを算出します
// 結果を所定の形式で出力する
print("Event: $eventName");
print("First invitation list: $firstSet");
print("Second invitation list: $secondSet");
// 残りの出力ステートメントをここに追加してください
}論理とフローのすべてのレッスン
1リスト操作の応用
リストのプロパティ: first と lastリストの状態: isEmpty と isNotEmptyリストの反転リストへの追加: insertリストの削除: removeWhereリスト内の検索: indexOfリストのソートリストのシャッフルまとめ - リストオーガナイザー