Set
は、TypeScript(JavaScript)で提供される組み込みオブジェクトで、重複しない一意の値のコレクションを管理するために使用されます。Set
は配列とは異なり、同じ値を複数回含むことができません。TypeScriptでSet
を使うことで、効率的に重複のないデータを扱うことができます。
#Setの基本的な使い方
1. Set
の作成
Set
を作成するには、new Set()
コンストラクターを使用します。初期値として配列などのイテラブルなオブジェクトを渡すことができます。
// 空のSetを作成 const mySet = new Set<number>(); // 初期値を持つSetを作成 const initialSet = new Set<string>(['apple', 'banana', 'orange']);
2. 要素の追加
add
メソッドを使用して、Set
に要素を追加できます。Set
に同じ要素を追加しようとした場合、重複は許可されません。
mySet.add(1); mySet.add(2); mySet.add(2); // 重複する値は無視される console.log(mySet); // 出力: Set { 1, 2 }
3. 要素の削除
delete
メソッドを使用して、Set
から要素を削除できます。削除に成功するとtrue
を返し、要素が存在しない場合はfalse
を返します。
mySet.delete(2); // 2を削除 console.log(mySet); // 出力: Set { 1 }
4. 要素の存在確認
has
メソッドを使用して、特定の要素がSet
に存在するかどうかを確認できます。
console.log(mySet.has(1)); // 出力: true console.log(mySet.has(2)); // 出力: false
5. 要素のクリア
clear
メソッドを使用して、Set
内のすべての要素を削除できます。
mySet.clear(); console.log(mySet); // 出力: Set {}
6. サイズの取得
size
プロパティを使用して、Set
内の要素の数を取得できます。
console.log(initialSet.size); // 出力: 3
#Setのイテレーション
Set
はイテラブルなので、for...of
ループやforEach
メソッドを使用して、Set
内の要素を反復処理することができます。
for...of
ループの例
for (const item of initialSet) { console.log(item); } // 出力: // apple // banana // orange
forEach
メソッドの例
initialSet.forEach((value) => { console.log(value); }); // 出力: // apple // banana // orange
#Setの活用例
1. 配列から重複を排除
Set
を使用して、配列から重複した要素を簡単に取り除くことができます。
const numbers = [1, 2, 2, 3, 4, 4, 5]; const uniqueNumbers = Array.from(new Set(numbers)); console.log(uniqueNumbers); // 出力: [1, 2, 3, 4, 5]
2. 集合の操作(和・差・積)
Set
を使って、集合の操作を行うことができます。以下に、和集合、差集合、積集合の操作の例を示します。
和集合(Union)
2つのSet
の和集合を求めるには、新しいSet
を作成し、Set.prototype.add
メソッドを使用して要素を追加します。
const setA = new Set([1, 2, 3]); const setB = new Set([3, 4, 5]); const union = new Set([...setA, ...setB]); console.log(union); // 出力: Set { 1, 2, 3, 4, 5 }
差集合(Difference)
setA
からsetB
の要素を引いた差集合を求めるには、for...of
ループとSet.prototype.has
メソッドを使用します。
const difference = new Set([...setA].filter(x => !setB.has(x))); console.log(difference); // 出力: Set { 1, 2 }
積集合(Intersection)
2つのSet
の積集合を求めるには、filter
メソッドを使用して、両方のSet
に存在する要素を抽出します。
const intersection = new Set([...setA].filter(x => setB.has(x))); console.log(intersection); // 出力: Set { 3 }
#Setの利点と用途
- 重複排除: 自動的に重複を排除するため、重複を許さないコレクションの管理に便利です。
- 効率的な要素の検索:
Set
は要素の存在確認に効率的です。 - 集合演算の実装: 和集合、積集合、差集合などの数学的な集合演算を簡単に実装できます。
#まとめ
Set
は、重複しない一意の値を管理するための強力なツールであり、データの重複排除や集合演算に役立ちます。Set
の使い方を理解し、適切な場面で活用することで、効率的で簡潔なコードを書くことができます。TypeScriptを使用することで、Set
を利用した型安全な操作が可能になります。