Menu
Coddy logo textTech

部分集合と上位集合

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

集合 A のすべての要素が集合 B の要素でもある場合、集合 A は集合 B の部分集合です。逆に、B が A のすべての要素を含む場合、B は A の上位集合です。

2つの集合は、まったく同じ要素を含んでいる場合、等しいです。例えば、いくつかテストを作成してみましょう:

const setA = new Set([1, 2, 3]);
const setB = new Set([1, 2, 3, 4, 5]);
const setC = new Set([1, 2, 3]);
const setD = new Set([6, 7, 8]);

setA が setB の subset かどうかを確認する関数:

function isSubset(setA, setB) {
  return [...setA].every(element => setB.has(element));
}

setA が setB のスーパーセットかどうかを確認する関数:

function isSuperset(setA, setB) {
  return isSubset(setB, setA);
}

2つの集合が等しいかどうかを確認する関数:

function areEqual(setA, setB) {
  return setA.size === setB.size && isSubset(setA, setB);
}

部分集合の関係をテストする:

// A は B の部分集合か? 
isSubset(setA, setB) // true
// B は A の部分集合か? 
isSubset(setB, setA) // false
// D は B の部分集合か? 
isSubset(setD, setB) // false

superset 関係のテスト:

// B は A のスーパーセット?
isSuperset(setB, setA) // true
// A は B のスーパーセット?
isSuperset(setA, setB) // false

等価性のテスト:

// AはCと等しい?
areEqual(setA, setC) // true
// AはBと等しい?
areEqual(setA, setB) // false
// AはDと等しい?
areEqual(setA, setD) // false
challenge icon

チャレンジ

簡単

analyzeSetRelationsという名前のfunctionを作成し、パラメーターとして2つの配列、arr1arr2を受け取るようにしてください。このfunctionは配列をsetsに変換し、次のプロパティを持つオブジェクトを返します。

  • isSubsetset1set2のsubsetであるかどうかを示すboolean
  • isSupersetset1set2のsupersetであるかどうかを示すboolean
  • isEqualset1set2がまったく同じelementを持っているかどうかを示すboolean

自分で試してみよう

function analyzeSetRelations(arr1, arr2) {
    let set1 = new Set(arr1);
    let set2 = new Set(arr2);

    // .every() と .has() を使用して集合の関係を確認する
    let isSubset = false;   // TODO: set1 のすべての要素が set2 に存在するかを確認する
    let isSuperset = false; // TODO: set2 のすべての要素が set1 に存在するかを確認する
    let isEqual = false;    // TODO: 両方の集合が同じサイズで、かつ isSubset が true であるかを確認する

    return {
        isSubset: isSubset,
        isSuperset: isSuperset,
        isEqual: isEqual
    };
}
quiz icon腕試し

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

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

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