Menu
Coddy logo textTech

和集合

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

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

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

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() は、スキルセットの統合、ユーザー権限の結合、または複数のソースからのデータの集約など、重複を排除しながら関連するコレクションを組み合わせるのに最適です。

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


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

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

セットの要素を1つの読みやすい文字列として表示するには、join()メソッドを使用します。各要素の間に配置する区切り文字列を渡すことができます。


Set<String> sharedSkills = {'JavaScript'};
print(sharedSkills.join(', '));  // JavaScript

Set<String> allSkills = {'HTML', 'CSS', 'JavaScript', 'Python', 'SQL'};
print(allSkills.join(', '));  // HTML, CSS, JavaScript, Python, SQL
challenge icon

チャレンジ

簡単

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

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

例えば、プロジェクト名が "Web Development Project" で、1人目のメンバーのスキルが "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" で、1人目のメンバーのスキルが "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" で、1人目のメンバーのスキルが "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つのスキルセットを結合し、重複が自動的に処理されることを示す必要があります。最初に個々のスキルセットを表示し、次に結合された結果を表示してください。両方の元のセットに存在するスキルを見つけることで、重複するスキルを特定します。重複するスキルがない場合は、重複スキルの行に "None" と表示してください。

チートシート

union() メソッドは、2つのセットを結合して、両方のセットのすべてのユニークな要素を含む単一のセットにします:

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}

union() メソッドは重複を自動的に処理します。同じ要素が両方のセットに存在する場合、結果のセットには1回だけ表示されます。

intersection() メソッドは、両方のセットに存在する要素のみを含む新しいセットを返します:

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

join() メソッドは、オプションのセパレータを使用してすべての要素を連結することにより、セットを String に変換します:

print(allSkills.join(', '));  // HTML, CSS, JavaScript, Python, SQL

自分で試してみよう

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腕試し

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

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