Menu
Coddy logo textTech

和集合

CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 22/65。

2つの別々の Set コレクションがある場合、union() メソッドを使用して、両方のすべての一意の要素を含む単一のセットに結合できます。この操作により、元のセットのいずれかに含まれるすべての要素を含む新しいセットが作成されます。

union() メソッドは、重複を自動的に処理します。同じ要素が両方のセットに存在する場合、結果として得られる和集合(union set)には一度だけ表示され、セットには一意の値のみが含まれるという基本特性が維持されます。

Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};

Set<String> allSkills = frontendSkills.union(backendSkills);
print(allSkills);  // {HTML, CSS, JavaScript, Python, SQL}

'JavaScript' が元の両方のセットに含まれていますが、和集合(union)の結果には一度だけ現れていることに注目してください。これにより、union() は、スキルセットの統合、ユーザー権限の結合、または複数のソースからのデータの集約など、重複がないことを保証しながら関連するコレクションを結合するのに最適です。

両方のセットに含まれる要素を見つけるには、intersection()メソッドを使用します。共有されている要素のみを含む新しいセットを返します:

Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills);  // {JavaScript}

重複する要素のセットができたら、join() メソッドを使用して読みやすい文字列に変換できます。これは List の場合と同じように機能します。指定した区切り文字を使用して、すべての要素を単一の文字列に結合します。

Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result);  // JavaScript

union()intersection()、および join() を組み合わせることで、集合データの比較や表示に役立つ強力なツールが利用可能になります。例えば、チームのスキルセットを統合したり、すでに共有されているスキルを特定したりすることができます。

challenge icon

チャレンジ

簡単

異なるチームメンバーのスキルセットを組み合わせて、包括的なプロジェクトスキルプロファイルを作成することにより、プロフェッショナルなネットワーキングシステムを管理するプログラムを作成してください。プログラムは以下の手順で行う必要があります:

  1. プロジェクト名を表す文字列入力を読み込む
  2. 最初のチームメンバーのスキルを表す複数の文字列入力を読み込む(入力は "member1_done" を受け取ったときに終了します)
  3. 2番目のチームメンバーのスキルを表す複数の文字列入力を読み込む(入力は "member2_done" を受け取ったときに終了します)
  4. 各チームメンバーのスキルを保存するために、2つの個別の Set を作成する
  5. union() メソッドを使用して、両方のスキルセットを包括的なプロジェクトスキルプロファイルに統合する
  6. 以下に示す正確な形式でスキルの組み合わせ結果を出力する

例えば、プロジェクト名が "Web Development Project" で、最初のメンバーのスキルが "HTML", "CSS", "JavaScript", "React" であり、2番目のメンバーのスキルが "JavaScript", "Node.js", "MongoDB", "React" の場合、プログラムは以下のように出力する必要があります:

Project: Web Development Project
Team Member 1 skills: {HTML, CSS, JavaScript, React}
Team Member 2 skills: {JavaScript, Node.js, MongoDB, React}
Combined project skills: {HTML, CSS, JavaScript, React, Node.js, MongoDB}
Total unique skills available: 6
Overlapping skills: JavaScript, React
Status: Project skill profile created successfully

プロジェクト名が "Mobile App Development" で、最初のメンバーのスキルが "Dart", "Flutter", "Firebase" であり、2番目のメンバーのスキルが "Swift", "iOS", "Xcode" の場合、プログラムは以下のように出力する必要があります:

Project: Mobile App Development
Team Member 1 skills: {Dart, Flutter, Firebase}
Team Member 2 skills: {Swift, iOS, Xcode}
Combined project skills: {Dart, Flutter, Firebase, Swift, iOS, Xcode}
Total unique skills available: 6
Overlapping skills: None
Status: Project skill profile created successfully

プロジェクト名が "Data Science Project" で、最初のメンバーのスキルが "Python", "Pandas", "NumPy", "SQL" であり、2番目のメンバーのスキルが "Python", "SQL", "Tableau", "Statistics" の場合、プログラムは以下のように出力する必要があります:

Project: Data Science Project
Team Member 1 skills: {Python, Pandas, NumPy, SQL}
Team Member 2 skills: {Python, SQL, Tableau, Statistics}
Combined project skills: {Python, Pandas, NumPy, SQL, Tableau, Statistics}
Total unique skills available: 6
Overlapping skills: Python, SQL
Status: Project skill profile created successfully

プログラムでは union() メソッドを使用して2つのスキルセットを結合し、重複が自動的に処理されることを示す必要があります。最初に個々のスキルセットを表示し、次に結合された結果を表示してください。両方の元のセットに存在するスキルを見つけることで、重複するスキルを特定します。重複するスキルがない場合は、overlapping skills の行に "None" と表示してください。

自分で試してみよう

import 'dart:io';

void main() {
  // プロジェクト名を読み込む
  String? projectName = stdin.readLineSync();
  
  // 1人目のチームメンバーのスキルを読み込む
  Set<String> member1Skills = <String>{};
  String? skill;
  while ((skill = stdin.readLineSync()) != "member1_done") {
    if (skill != null) {
      member1Skills.add(skill);
    }
  }
  
  // 2人目のチームメンバーのスキルを読み込む
  Set<String> member2Skills = <String>{};
  while ((skill = stdin.readLineSync()) != "member2_done") {
    if (skill != null) {
      member2Skills.add(skill);
    }
  }
  
  // TODO: 以下にコードを記述してください
  // union() メソッドを使用して、両方のスキルセットを結合する
  // 2つのセット間で重複するスキルを見つける
  // ユニークなスキルの総数を計算する
  
  // 要求された形式で結果を出力する
  print("Project: $projectName");
  print("Team Member 1 skills: $member1Skills");
  print("Team Member 2 skills: $member2Skills");
  // 結合されたスキル、総数、重複するスキル、およびステータスを出力する
}
quiz icon腕試し

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

論理とフローのすべてのレッスン