部分集合と上位集合
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) // falsesuperset 関係のテスト:
// 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チャレンジ
簡単analyzeSetRelationsという名前のfunctionを作成し、パラメーターとして2つの配列、arr1とarr2を受け取るようにしてください。このfunctionは配列をsetsに変換し、次のプロパティを持つオブジェクトを返します。
isSubset:set1がset2のsubsetであるかどうかを示すbooleanisSuperset:set1がset2のsupersetであるかどうかを示すbooleanisEqual:set1とset2がまったく同じ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
};
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: JavaScriptオンラインコンパイラ