プログラマ文字列で任意にソート


Programmer文字列でLV 1を任意にソート


質問リンク:https://programmers.co.kr/learn/courses/30/lessons/12915

私の質問

function solution(strings, n) {

    for(let i = 0; i < strings.length; i++) {
        strings[i] = strings[i][n] + strings[i];
    }

    strings.sort();

    for(let j = 0; j < strings.length; j++) {
        strings[j] = strings[j].substring(1);
    }

   return strings;
}
各文字列の特定のインデックスに基づいてソートされるため、このように書かれています.

じっこうじかん



人の質問に答える(1)

function solution(strings, n) {
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
まずは短いですね

じっこうじかん



思ったより実行時間が長い.sort()と書いてあり、同時にString.prototype.localeCompare()と書いてあるからかもしれません.あなたのおかげでlocaleCompareの使い方がわかりました.

人の質問に答える(2)

function solution(strings, n) {
    return strings.sort((a, b) => {
        const chr1 = a.charAt(n);
        const chr2 = b.charAt(n);

        if (chr1 == chr2) {
            return (a > b) - (a < b);
        } else {
            return (chr1 > chr2) - (chr1 < chr2);
        }
    })
}
Booleanの価格を差し引いて、1または-1をエクスポートするのは少し驚きです.

じっこうじかん



この論理も速いようです.しかし、私が使った論理にはいくつかのテスト例があり、速度は非常に速く、約0.01~0.02 msです(これは何の意味がありますか...)

学識


やはり人の解答を見なければならない.実行時間を離れて、まず多くのことを学んだようです.Booleanの値の間には、演算によって1、-1を導出することができ、localeCompareの使い方も理解できる.またjavascript内のメソッドはたくさんありますが、速度自体では基本for loopを何回かに分けて使用すると、実行速度がさらに速くなることも見られます.問題を解決するために使うべきだが、スピード的に見ると、JavaScriptの基本的な方法を多く使うのは必ずしも腕ではない.