TypeScriptで利用できるデータ構造の1つにSetがあります。Setは一意な値の集まりであり、Setは重複を許しません。
TypeScriptでは、Setクラスの新しいインスタンスを作成することで、Setを定義することができます。
Note: 集合とは一意な値を集めたものです。集合の数学的定義は、コンピュータサイエンスにおけるSetデータ構造の基礎となっています。コンピュータサイエンスでは、集合は値のコレクションを特定の順序で保存および管理するために使用されます。数学と同様に、コンピュータサイエンスにおける集合は、値の重複を許しません。
Setは、以下のように宣言されます。
let s = new Set();
Setクラスの引数には、オプションで反復可能なオブジェクトを指定することができます。前述のような空のSetオブジェクトの型はSet
例えば数値型を指定したい場合は次のようになります。
let s = new Set<number>();
const mySet = new Set([1, 2, 3, 4]);
この例では、新しいSetインスタンスを作成し、反復可能なオブジェクトとして配列を渡しています。結果として得られるSetには、1,2,3および4の値が含まれます。
TypeScriptでは、Setに対していくつかの操作を行うことができます。よく使われる操作としては、以下のようなものがあります。
Setのサイズを返します。
const mySet = new Set([1, 2, 3, 4]);
console.log(mySet.size); // 4
Setに値を追加します。Setは重複を許しません。そのため、同じ値を複数回追加してもSetに格納される値は1つのみです。
const mySet = new Set([1, 2, 3, 4]);
mySet.add(5);
console.log(mySet); // Set { 1, 2, 3, 4, 5 }
mySet.add(5);
console.log(mySet); // Set { 1, 2, 3, 4, 5 }
Setから値を削除します。
const mySet = new Set([1, 2, 3, 4]);
mySet.delete(2);
console.log(mySet); // Set { 1, 3, 4, 5 }
ある値がSetの中に存在するかどうかをチェックします。
const mySet = new Set([1, 2, 3, 4]);
console.log(mySet.has(3)); // true
console.log(mySet.has(2)); // false
Setからすべてを取り除きます。
const mySet = new Set([1, 2, 3, 4]);
mySet.clear();
console.log(mySet); // Set {}
組み込みのforEach()メソッドまたはfor...ofループを使用して、Setに対して反復処理を行うことができます。
以下は、forEach()メソッドを使った例です。
const mySet = new Set([1, 2, 3]);
mySet.forEach((value) => {
console.log(value);
});
以下は、for...ofループを使った例です。
const mySet = new Set([1, 2, 3]);
for (const value of mySet) {
console.log(value);
}
どちらのループにおいてもSet内の配列の値が一つずつ表示されます。
TypeScriptのメソッドは連結して使用することができ、Setに対しても使用することができます。
console.log(mySet.add(6).has(6)); // true
この例では、最初にaddメソッドが呼び出され、値6がSetに追加されます。addメソッドの結果はSetそのものなので、hasメソッドをその末尾に連結して、値が正常に追加されたかどうかをチェックすることができます。
オンラインショッピングのWebアプリケーションで、Set型を使って、ユーザーのカートにアイテムを格納するシーンを考えてみましょう。
interface Product {
id: number;
name: string;
price: number;
}
const shoppingCart = new Set<Product>();
function addToCart(product: Product) {
shoppingCart.add(product);
console.log(`${product.name} has been added to the cart.`);
}
const product1: Product = {
id: 1,
name: 'T-Shirt',
price: 25
};
const product2: Product = {
id: 2,
name: 'Jeans',
price: 50
};
const product3: Product = {
id: 3,
name: 'Sneakers',
price: 75
};
addToCart(product1); // "T-Shirt has been added to the cart."
addToCart(product2); // "Jeans has been added to the cart"
addToCart(product3); // "Sneakers has been added to the cart."
addToCart(product1); // "T-Shirt has been added to the cart."
console.log(shoppingCart); // { {"id": 1, "name": "T-Shirt", "price": 25}, {"id": 2, ...}, ... }
console.log(shoppingCart.size) // 3
shoppingCartは一意なアイテムのみを含むので、カート内にすでに存在するproductを追加しようとしても、それは再び追加されません。