占い《Bランク UP メニュー》Map()

Bランクレベルアップメニュー【連想配列・血液型のデータ・1人の血液型・1つの血液型・1人の占い結果・占い】

【連想配列 (辞書) を使う】コード

// Map() のコンストラクタは[[キー, 値],…]
const User = new Map([
   ['Kyoko', 'B'],
   ['Kyoko', 'B'],
   ['Rio', 'O'],
   ['Tsubame', 'AB'],
   ['KurodaSensei', 'A'],
   ['NekoSensei', 'A']
]);
User.forEach((value, key) => {  // forEach() で (値, キー)にアクセス
   console.log(key, value);  // (キー, 値)を出力
});
hogeちゃんの画像

連想配列は Map() を使いました。コンストラクタはキーと値の二次元配列です。Object{} と似ていますけど こっちの方が 実行時の負荷が少ない感じがします。Map()の解説はとほほのJavaScriptリファレンスを参照しました。

【血液型のデータ】コード

reader.on('close', () => {
   const n = Number(lines[0]);
   const User = new Map();  // Map() を定義
   for (let i = 1; i <= n; i++) {
      const [A, B] = lines[i].split(' ');
      User.set(A, B);  // コンストラクタを追加(A = キー, B = 値)
   }
   User.forEach((value, key) => {  // forEach() で (値, キー)にアクセス
      console.log(key, value);  // (キー, 値)を出力
   });
});
hogeちゃんの画像

User という名前のマップを定義し User.set(A, B) で キー(A)と値(B) を追加。

【1人の血液型】コード

reader.on('close', () => {
   const s = lines[0];
   const n = Number(lines[1]);
   const User = new Map();  // Map() を定義
   for (let i = 2; i <= n + 1; i++) {
      const [A, B] = lines[i].split(' ');
      User.set(A, B);  // コンストラクタを追加(A = キー, B = 値)
   }
   console.log(s, User.get(s));  // s が キー となっている値を出力
});
hogeちゃんの画像

User.get(s)s が キー となっている 値 を呼出すことができました。

【1つの血液型を占う】コード

reader.on('close', () => {
   const T = lines[0];
   const m = Number(lines[1]);
   const User = new Map();  // Map() を定義
   for (let i = 2; i <= m + 1; i++) {
      const [A, B] = lines[i].split(' ');
      User.set(A, B);  // コンストラクタを追加(A = キー, B = 値)
   }
   console.log(User.get(T));  // T が キー となっている値を出力
});
hogeちゃんの画像
コンストラクタ が 変わりましたが それ以外は【STEP: 3】と同じでした。

【1人の占い結果】コード

reader.on('close', () => {
   const u = lines[0];
   const n = Number(lines[1]);
   const m = Number(lines[n + 2]);
   const User = new Map();  // Map() User(キー = 名前, 値 = 血液型) を定義
   const Fortune = new Map();  // Map() Fortune(キー = 血液型, 値 = 占い結果) を定義
   for (let i = 2; i <= n + 1; i++) {
      const [A, B] = lines[i].split(' ');
      User.set(A, B);  // User にコンストラクタを追加(A = キー = 名前, B = 値 = 血液型)
   }
   for (let i = n + 3; i < m + n + 3; i++) {
      const [A, B] = lines[i].split(' ');
      Fortune.set(A, B);  // Fortune にコンストラクタを追加(A = キー = 血液型, B = 値 = 占い結果)
   }
   const Blood = User.get(u);  // u が キー となっている User の 値 
   console.log(Fortune.get(Blood));  // Blood が キー となっている Fortune の 値 
});
hogeちゃんの画像

2つの マップ ( User, Fortune ) を定義し それぞれ キー と 値 をセット。Bloodu が キー となっている User の 値 を保存し Fortune.get(Blood)Blood が キー  となっている Fortune の 値 を 取得。

【占い】コード

reader.on('close', () => {
   const n = Number(lines[0]);
   const m = Number(lines[n + 1]);
   const User = new Map();  // Map() User(キー = 名前, 値 = 血液型) を定義
   const Fortune = new Map();  // Map() Fortune(キー = 血液型, 値 = 占い結果) を定義
   for (let i = 1; i < n + 1; i++) {
      const [A, B] = lines[i].split(' ');
      User.set(A, B);  // User にコンストラクタを追加(A = キー = 名前, B = 値 = 血液型)
   }
   for (let i = n + 2; i < m + n + 2; i++) {
      const [A, B] = lines[i].split(' ');
      Fortune.set(A, B);  // Fortune にコンストラクタを追加(A = キー = 名前, B = 値 = 血液型)
   }
   User.forEach((value, key) => {  // User の(値, キー)にアクセス
      console.log(key, Fortune.get(value));  // (key, value がキーとなっている Fortune の値)を出力
   });
});
hogeちゃんの画像

(key, Fortune.get(value))で User の 各 キー と対応する 値 が キー となっている Fortune の 値 を 取得しました。

コメント