テストエンコーディング|(JavaScript)プログラマー:文字列内で任意にソート


に質問


リスト文字列が文字列で構成され、整数nを有する場合、各文字列のインデックスnのn番目の文字に基づいて昇順にソートしようとします.たとえば、文字列が[「sun」、「bed」、「car」であり、nが1の場合、文字列は各単語インデックス1の文字「u」、「e」、および「a」でソートされます.

制限

  • 文字列の長さは1より大きく、50より小さい.
  • 文字列の要素は小文字で構成されています.
  • 文字列の要素の長さは1より大きく、100より小さい.
  • すべての文字列の要素長はnより大きい.
  • インデックス1の複数の文字が同じ文字列である場合、アルファベット順に並べられた先頭文字列が先頭に配置されます.
  • 🎹📢I/O例



    ほどく

    function solution(strings, n) {
        return strings.sort((a, b)=>{
            if(a[n] === b[n]){
                return a < b ? -1 : 1;
            } else if(a[n] < b[n]){
                return -1;
            } else {
                return 1;
            }
        });
    }
    1番目のパラメータは小さなインデックスの基準であり、2番目のパラメータは大きなインデックスの基準です.sort()関数では、降順と昇順の決定はreturn a - bは昇順return b - aは降順である.if(a < b) return 1は降順、if(a < b) return -1は昇順である.if(b < a) return 1は昇順、if(b < a) return -1は降順です.
    すなわち,aは小基準,bは大基準で返され,1は対応する条件で並べ替えられ,−1は対応する条件で並べ替えられ,0は変わらない.
    .

    🎈他人の解答

    function solution(strings, n) {
        return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
    }
    非常に簡潔なコードです.性能がもったいない.まず説明しましょう.
    文字と文字が同じ場合、文字列間で比較します.s 1が大きい場合は1を返し、小さい場合は−1を返し、異なる場合は文字と文字を再比較し、同様に左の文字が大きい場合は1を返し、文字が小さい場合は−1を返す.最初のパラメータs 1は、すなわち、小さなインデックスを基準として比較されるので、昇順ソートである.String.localeCompare()関数は、文字列と他の文字列を比較する関数です.戻り値は次のとおりです.先ほど述べた1と-1は、正確には正数と負数です.環境によって返却する数字が異なるそうです.
    console.log('a'.localeCompare('c')); // -1 또는 임의의 음수를 반환
    console.log('check'.localeCompare('against')); // 1또는 임의의 양수를 반환
    console.log('a'.localeCompare('a')); // 0을 반환
    左文字列と右文字列を比較する場合、左文字列が小さい場合は負、正の値より大きい場合は0を返します.しかし疑問なのが'check'.localeCompare('against')の場合、文字列判定基準が一番前の1文字であることがテストで確認できます.console.log('k'.localeCompare('eee'))は1を返します.これは、kおよびeとの比較結果が同じであることを意味する.

    参考資料とサイト(ありがとうございます)

  • https://programmers.co.kr/learn/courses/30/lessons/12915
  • Mozilla - String.localeCompare