Cランクレベルアップメニュー【書の基本・辞書のデータ更新・辞書データの順序・辞書】
【STEP: 1】コード
reader.on('close', () => {
const n = Number(lines[0]);
const S = lines[n + 1];
const wealth = new Map(); // マップ wealth を宣言
for (let i = 1; i <= n; i++) {
const [s, a] = lines[i].split(' ');
wealth.set(s, a); // wealth に要素 {s(キー), a(値)}を追加
}
console.log(wealth.get(S)); // wealth の S (キー)とペアの値を出力
});
マップ wealth を設置し set(s, a)
で 要素を追加。get(S)
で値を取得しています。
【STEP: 2】コード
reader.on('close', () => {
const n = Number(lines[0]);
const m = Number(lines[n + 1]);
const S = lines[n + m + 2];
const attack = new Map(); // マップ attack を宣言
for (let i = 1; i <= n; i++) {
const s = lines[i]; // s はダメージを受ける人の名前
attack.set(s, 0); // attack に 要素 {s, 0(ダメージ)} を追加
}
for (let i = n + 1; i <= m + n + 1; i++) {
const [p, a] = lines[i].split(' '); // p はダメージを受けた人, a はダメージの数
attack.set(p, attack.get(p) + Number(a)); // attack.p を {p, p の値 + Number(a)} で上書き
}
console.log(attack.get(S)); // attack.S の値を出力
});
set(s, 0)
とset(p, attack.get(p) + Number(a))
の s, p が同じ値なら s の値が上書きされるみたいね。
【STEP: 3】コード
reader.on('close', () => {
const n = Number(lines[0]);
const m = Number(lines[n + 1]);
const attack = new Map(); // マップ attack を宣言
for (let i = 1; i <= n; i++) {
const s = lines[i];
attack.set(s, 0); // attack に 要素 {s, 0(ダメージ)} を追加
}
for (let i = n + 2; i <= m + n + 1; i++) {
const [p, a] = lines[i].split(' ');
attack.set(p, attack.get(p) + Number(a)); // attack.p を {p, p の値 + Number(a)} で上書き
}
const A = [];
attack.forEach((value, key) => {
A.push(key); // A に attack の キー のみを保存
});
A.sort(); // A を辞書順で並替え
for (const a of A) {
console.log(attack.get(a)); // attack.a の値を出力
}
});
attack の キー を 配列 A に保存し A を辞書順 に並べ替え forEach()
で各要素を キー として持つ値を順次出力しました。
【FINAL】コード
reader.on('close', () => {
const [p, q, r] = lines[0].split(' ').map(Number);
const worker = new Map(); // マップ worker を宣言
const A = [];
for (let i = 1; i <= p; i++) {
const [a, b1] = lines[i].split(' ').map(Number);
// a は Aグループの人,b1は a が仕事を頼む Bグループの人
worker.set(a, b1); // worker に要素 {a, b1}を保存
A.push(a); // A に a を保存
}
for (const [key, value] of worker) {
for (let i = p + 1; i <= q + p; i++) {
const [b2, c] = lines[i].split(' ').map(Number);
// b2 は Bグループの人,cは b2 が仕事を頼む Cグループの人
if (value === b2) { // value が b2 と一致すれば
worker.set(key, c); // worker の要素を上書き
break;
}
}
}
A.sort((s, b) => s - b);
A.forEach(a => {
console.log(a, worker.get(a));
});
});
解答コード例
では マップを 2つ 作っていましたが こちらのコードは マップをひとつだけ作成し {a , b }を{a , c }で上書きしました。
コメント