部分集合と上位集合
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 の部分集合であるかを確認する関数:
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上位集合の関係のテスト:
// 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チャレンジ
簡単2つの配列 arr1 と arr2 を引数として受け取る analyzeSetRelations という関数を作成してください。この関数は配列をセットに変換し、以下のプロパティを持つオブジェクトを返す必要があります。
isSubset:set1がset2の部分集合であるかどうかを示す真偽値isSuperset:set1がset2の上位集合であるかどうかを示す真偽値isEqual:set1とset2がまったく同じ要素を持っているかどうかを示す真偽値
チートシート
集合Aのすべての要素が集合Bの要素でもある場合、集合Aは集合Bの部分集合です。逆に、集合Bが集合Aのすべての要素を含んでいる場合、BはAの上位集合です。2つの集合がまったく同じ要素を含んでいる場合、それらは等しいと言えます。
setAがsetBの部分集合であるかを確認します:
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);
}自分で試してみよう
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
};
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。