Closed4
辞書データをソートするための自作関数

アルファベット順にソートをしたい.sort()を使えば,ソートはできるはずだが,せっかくなので自作で関数を実装したい.

Javascriptの文字列について

とりあえず,汚いけどできた.本当に汚いな...
c_rank_dictionary_step3.js
const n = Number(lines[0]);
const name_list = lines
.slice(1, n + 1)
.map((row) => row.split(" "))
.map((items) => {
let obj = {};
items.forEach((element, index) => {
obj["name"] = element;
obj["damage"] = 0;
});
return obj;
});
const m = Number(lines[n + 1]);
const damage_list = lines
.slice(n + 2, n + m + 2)
.map((row) => row.split(" "))
.map((items) => {
let obj = {};
items.forEach((element, index) => {
if (index == 0) obj["name"] = element;
if (index == 1) obj["damage"] = Number(element);
});
return obj;
});
function compareStrings(a, b) {
if (a < b) {
return -1;
} else if (a > b) {
return 1;
}
return 0;
}
function dictionarySort(n, objects) {
let j, tmp;
for (let i = 1; i < n; i++) {
if (objects[i]["name"] !== undefined) {
tmp = objects[i];
j = i - 1;
while (j >= 0 && compareStrings(objects[j]["name"], tmp["name"]) > 0) {
objects[j + 1] = objects[j];
j--;
}
objects[j + 1] = tmp;
}
}
return objects;
}
dictionarySort(n, name_list);
name_list.map((element) => {
damage_list.forEach((item) => {
if (item.name === element.name) return (element.damage += item.damage);
});
});
name_list.forEach((item) => console.log(item.damage));

ありがたいことにJSの解答例が載っていた.(要ログイン)
sortは使っているが,ずっと「いつ使うの?」「連想配列にしちゃえばいいか...」と思っていたnew Mapが使われていたのでメモ.
入力例
5
DOG
CAT
BIRD
ANT
ELEPHANT
4
DOG 3
ANT 5
BIRD 2
DOG 1
mapを出力してみる
Map(5) {
'DOG' => 4,
'CAT' => 0,
'BIRD' => 2,
'ANT' => 5,
'ELEPHANT' => 0
}
こうやって使えるんだ
連想配列(オブジェクト)との違いは下記で.
このスクラップは2024/08/09にクローズされました