TypeScript で ES6 Map を使う
TypeScriptでES6 Mapを使用する
ES6 MapはJavaScriptの新しいデータ構造で、キーと値のペアを格納することができます。TypeScriptでは、ES6 Mapをそのまま使用することができます。
基本的な使い方
let map = new Map();
// キーと値のペアを追加
map.set("key1", "value1");
map.set(123, "value2");
map.set(true, "value3");
// キーに対応する値を取得
let value1 = map.get("key1");
let value2 = map.get(123);
// キーが存在するか確認
let exists = map.has("key1");
// キーと値のペアを削除
map.delete("key1");
// マップのサイズを取得
let size = map.size;
// 全てのキーと値をループで処理
for (let [key, value] of map) {
console.log(key, value);
}
TypeScript 1.5以前の注意点
TypeScript 1.5以前では、Map
の型定義が提供されていませんでした。そのため、any
型で扱う必要がありました。
let map: Map<any, any> = new Map();
TypeScript 1.5以降では、Map
の型定義が提供されるようになったため、より安全なコードを書くことができます。
便利なメソッド
- values()
マップ内のすべての値をイテレーターとして返します。 - clear()
マップ内のすべてのキーと値を削除します。 - forEach(callback)
マップ内のすべてのキーと値に対してコールバック関数を呼び出します。
let map = new Map();
// キーと値のペアを追加
map.set("key1", "value1");
map.set(123, "value2");
map.set(true, "value3");
// キーに対応する値を取得
let value1 = map.get("key1");
let value2 = map.get(123);
// キーが存在するか確認
let exists = map.has("key1");
// キーと値のペアを削除
map.delete("key1");
// マップのサイズを取得
let size = map.size;
// 全てのキーと値をループで処理
for (let [key, value] of map) {
console.log(key, value);
}
// forEachメソッドを使用して、すべてのキーと値を処理
map.forEach((value, key) => {
console.log(key, value);
});
// clearメソッドを使用して、すべてのキーと値を削除
map.clear();
// entriesメソッドを使用して、キーと値のペアをイテレーターとして取得
for (let entry of map.entries()) {
console.log(entry[0], entry[1]);
}
// keysメソッドを使用して、すべてのキーをイテレーターとして取得
for (let key of map.keys()) {
console.log(key);
}
// valuesメソッドを使用して、すべての値をイテレーターとして取得
for (let value of map.values()) {
console.log(value);
}
let map: Map<any, any> = new Map();
// キーと値のペアを追加
map.set("key1", "value1");
// キーに対応する値を取得
let value1 = map.get("key1");
オブジェクト
- 例
- シンプルなキーと値のペア
オブジェクトは、文字列をキーとして使用する場合に適しています。
let obj: { [key: string]: any } = {
name: "John",
age: 30
};
Array
- 順序付けされたデータ
配列は、データの順序を保持する必要がある場合に適しています。
let array: [number, string][] = [
[1, "apple"],
[2, "banana"]
];
WeakMap
- ガベージコレクション
WeakMapは、キーが参照されなくなった場合に自動的にガベージコレクションされるため、メモリリークを防ぐことができます。
let weakMap = new WeakMap();
let obj = {};
weakMap.set(obj, "value");
カスタムデータ構造
- 特定の要件
特定のユースケースに合わせて、カスタムデータ構造を実装することもできます。
class MyMap {
private map: Map<string, any>;
constructor() {
this.map = new Map();
}
set(key: string, value: any) {
// カスタムのロジックを追加
this.map.set(key, value);
}
// 他のメソッドを実装
}
選択の基準
- 特定の要件
カスタムデータ構造は、特定のユースケースに合わせて柔軟に設計することができます。 - メモリ管理
ガベージコレクションが必要な場合はWeakMapが適しています。 - 順序
順序を保持する必要がある場合は配列が適しています。 - キーの種類
文字列キーを使用する場合はオブジェクトが適しています。
javascript typescript typescript1.5