テストエンコーディング|(JavaScript)プログラマー:文字列内で任意にソート
に質問
リスト文字列が文字列で構成され、整数nを有する場合、各文字列のインデックスnのn番目の文字に基づいて昇順にソートしようとします.たとえば、文字列が[「sun」、「bed」、「car」であり、nが1の場合、文字列は各単語インデックス1の文字「u」、「e」、および「a」でソートされます.
制限
🎹📢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
との比較結果が同じであることを意味する.参考資料とサイト(ありがとうございます)
Reference
この問題について(テストエンコーディング|(JavaScript)プログラマー:文字列内で任意にソート), 我々は、より多くの情報をここで見つけました https://velog.io/@goblin820/코딩테스트-JavaScript-프로그래머스-문자열-내-마음대로-정렬하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol