和集合
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); // JavaScriptunion()、intersection()、join()を組み合わせることで、集合データを比較して表示するための強力なツールになります。たとえば、チームのスキルセットを組み合わせたり、チームがすでに共有しているスキルを特定したりできます。
チャレンジ
簡単異なるチームメンバーのスキルセットを組み合わせて包括的なプロジェクトスキルプロフィールを作成する、プロフェッショナルなネットワーキングシステムを管理するプログラムを作成してください。プログラムでは次の処理を行います。
- プロジェクト名を表す文字列入力を読み取る
- 最初のチームメンバーのスキルを表す複数の文字列入力を読み取る(
"member1_done"を受け取った時点で入力は終了します) - 2人目のチームメンバーのスキルを表す複数の文字列入力を読み取る(
"member2_done"を受け取った時点で入力は終了します) - 各チームメンバーのスキルを格納する2つの個別の集合を作成する
union()メソッドを使用して両方のスキルセットを組み合わせ、包括的なプロジェクトスキルプロフィールを作成する- 以下に示す正確な形式でスキルの組み合わせ結果を出力する
たとえば、プロジェクト名が"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"と表示してください。
自分で試してみよう
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
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
1リスト操作の応用
リストのプロパティ: first と lastリストの状態: isEmpty と isNotEmptyリストの反転リストへの追加: insertリストの削除: removeWhereリスト内の検索: indexOfリストのソートリストのシャッフルまとめ - リストオーガナイザー自分で練習してみよう: Dartオンラインコンパイラ