Menu
Coddy logo textTech

和集合

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

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

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

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

bothの集合に現れる要素を見つけるには、intersection()メソッドを使用します。共有されている要素だけを含む新しい集合を返します:

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

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

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つの個別の集合を作成する
  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

プログラムでは、2つのスキルセットを組み合わせるためにunion()メソッドを使用し、重複を自動的に処理できることを示してください。まず個別のスキルセットを表示し、その後に結合した結果を表示します。元の両方のセットに含まれるスキルを見つけて、重複するスキルを特定してください。重複するスキルがない場合は、重複スキルの行に"None"と表示してください。

REQUIRED OUTPUT FORMAT: [Your translated content here]

自分で試してみよう

import 'dart:io';

void main() {
  // プロジェクト名を読み取る
  String? projectName = stdin.readLineSync();
  
  // 最初のチームメンバーのスキルを読み取る
  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() メソッドを使って両方のスキルセットを結合する
  // Find overlapping skills between the two sets
  // Calculate total unique skills
  
  // 結果を指定の形式で出力する
  print("Project: $projectName");
  print("Team Member 1 skills: $member1Skills");
  print("Team Member 2 skills: $member2Skills");
  // Print combined skills, total count, overlapping skills, and status
}
quiz icon腕試し

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

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

自分で練習してみよう: Dartオンラインコンパイラ