1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 ソートメニュー応用編 JavaScript 文字列のソート

Last updated at Posted at 2022-09-13

文字列のソート (paizaランク B 相当)

sort関数内で、
文字列の昇順は

return a.length - b.length;

で、辞書順にするには、

if (a < b) { //辞書順でaがbの前なら
    return -1;//aをbの前に並べる
}
if (a > b) { //辞書順でaがbの後なら
    return 1;//aをbの後に並べる
}
return 0;//一緒なら元の順序のまま

のようにします。

解答例(比較関数自作)

ソート関数の中で、優先順位にしたがってifで場合分けをします。

javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//文字列の数 n
const n = Number(lines[0]);
//文字列の配列 s
const s = lines.slice(1).sort((a, b) => {
    //1. 各文字列の文字数が昇順になるようにする。
    if (a.length !== b.length) {
        return a.length - b.length;
    //2. 文字数が等しい複数の文字列の中では、辞書順になるようにする。    
    } else {
        if (a < b) {
            return -1;
        }
        if (a > b) {
            return 1;
        }
        return 0;
    }
});
console.log(s.join("\n"));

解答例(優先順でソート順を変える)

優先順位が低い方からソートします。

javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//文字列の数 n
const n = Number(lines[0]);
//文字列の配列 s
const s = lines.slice(1);

//2. 文字数が等しい複数の文字列の中では、辞書順になるようにする。    
s.sort((a, b) => {
    if (a < b) {
        return -1;
    }
    if (a > b) {
        return 1;
    }
    return 0;
});

//1. 各文字列の文字数が昇順になるようにする。
s.sort((a, b) => a.length - b.length);

console.log(s.join("\n"));
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?