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); // (キー, 値)を出力
});
連想配列は 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); // (キー, 値)を出力
});
});
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 が キー となっている値を出力
});
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 が キー となっている値を出力
});
コンストラクタ が 変わりましたが それ以外は【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 の 値
});
2つの マップ ( User, Fortune ) を定義し それぞれ キー と 値 をセット。Blood に u が キー となっている 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 の値)を出力
});
});
(key, Fortune.get(value))
で User の 各 キー と対応する 値 が キー となっている Fortune の 値 を 取得しました。
コメント