🐷
🤦♀️また、「マップ(Map)」
他の記事でも出てきましたが、また出てきてつぶせていないので、書きます。
https://zenn.dev/milbon/articles/e95ea3cf3ea734
Map とは?
具体的には、JavaScript でデータをキーと値のペアとして保存するためのオブジェクトの一種です。
Map は JavaScript の組み込みオブジェクトで、キーと値のペアを保存するためのデータ構造です。Map を使用すると、特定のキーに対して特定の値を保存し、それをあとから効率的に取得することができます。Map はキーにあらゆる型のデータを使えるのが特徴です。
たとえば、次のように使用します。
// 新しい Map の作成
const map = new Map();
// 値を追加する
map.set('key1', 'value1');
map.set('key2', 'value2');
// 値を取得する
console.log(map.get('key1')); // 出力: value1
// キーが存在するか確認
console.log(map.has('key2')); // 出力: true
// 値を削除する
map.delete('key1');
// サイズを確認する
console.log(map.size); // 出力: 1
Map とオブジェクトの違い
JavaScript にはすでにオブジェクトがあり、オブジェクトもキーと値のペアを持つことができますが、Map にはいくつかの利点があります。
キーに任意の型を使用可能:
Map はキーに文字列だけでなく、オブジェクトや関数など任意の型を使うことができます。
一方で、オブジェクトはキーに文字列またはシンボルだけを使います。
キーの順番の保証:
Map ではキーが追加された順番が保証されます。
オブジェクトの場合、順序は保証されないことがあります。
サイズの取得が簡単:
Map の場合、size プロパティを使ってエントリーの数を簡単に取得できます。
オブジェクトの場合は手動でカウントする必要があります。
Map の使い方のポイント
作成
const map = new Map<number,number>();
として Map を作成します。
値の設定
map.set(key, value)
で、キーと値のペアを保存します。
値の取得
map.get(key)
で、指定したキーの値を取得します。
キーの存在確認
map.has(key)
で、特定のキーが存在するかどうかを確認できます。
サイズの確認
map.size
で、現在のキーと値のペアの数を取得します。
問
2 つの文字列配列 words1 と words2 が与えられた場合、2 つの配列のそれぞれに 1 回だけ出現する文字列の数を返します。
例:
Input: words1 = ["leetcode","is","amazing","as","is"], words2 = ["amazing","leetcode","is"]
Output: 2
function countWords(words1: string[], words2: string[]): number {
// 各配列内の単語の出現回数をカウントするためのマップ
const countMap1 = new Map<string, number>();
const countMap2 = new Map<string, number>();
// words1 の出現回数をカウント
// countMap1.setで words1 の各要素(word)をキーにして、その出現回数を記録する
// countMap1.get(word) で、現在の出現回数を取得し、それに 1 を加えることで更新する
for (const word of words1) {
countMap1.set(word, (countMap1.get(word) || 0) + 1);
}
// words2 の出現回数をカウント
// countMap2 を使って words2 の各要素を同様にカウントする
for (const word of words2) {
countMap2.set(word, (countMap2.get(word) || 0) + 1);
}
// リターンする変数 count を定義
let count = 0;
// words1 の各単語をループして、両方の配列で1回だけ出現するか確認
// const [word, freq] は countMap1 から取得するキー(word)とその出現回数(freq)を表す
for (const [word, freq] of countMap1.entries()) {
// words1 における出現回数が 1 で、かつ words2 における出現回数も 1 であるかを確認
if (freq === 1 && countMap2.get(word) === 1) {
count++;
}
}
return count;
}
Discussion