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を利用した型安全な操作が可能になります。