私は今日の午後、アルゴリズムの問題に長い間閉じ込められ、ついに理解しました。
この問題を整理して要約するには、特定のネチズンの解決策を参照してください
トピック
jsソリューションコード
全体のアイデア
まず、2つの配列arr1、arr2、を定義します。
ログ配列をトラバースして、各ログの最後の値が数値かどうかを判断します。文字列ログをarr1に、デジタルログをarr2に配置します。次に、arr1を並べ替えます
。
最初にsortメソッドを使用して、識別子に従ってarr1を並べ替えます。
ログ内のアルファベット順に従って、アルファベットログのUnicodeサイズを判断してソートされます。
最後に、アルファベット順の後ろに番号を追加します
コード分析
arr1.sort((x,y) =>{
return x.slice(x.indexOf(' ')) < y.slice(y.indexOf(' ')) ? -1:1
})
ここで理解しにくいコードには、主に
Array.prototype.slice()
String.prototype.indexOf()
Array.prototype.sort()
これらのjs関数が含まれます。
Array.prototype.sort()
1.配列の要素を並べ替えて、配列を返します。デフォルトのソート順は、要素が文字列に変換されたときに作成され、UTF-16コード単位値シーケンスが比較されます。
2.arr.sort([compareFunction])compareFunctionは
、関数のカスタム並べ替えのために特定の順序で配置される関数の並べ替えを指定するために使用されます。
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
也可以写成:
var numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b);
console.log(numbers);
// [1, 2, 3, 4, 5]
String.prototype.indexOf()
indexOf()メソッドは、それを呼び出したStringオブジェクトで指定された値が最初に出現するインデックスを返し、fromIndexから検索します。値が見つからない場合は、-1が返されます。
str.indexOf(searchValue [、fromIndex])。
searchValueは、検索する文字列値です。fromIndexは、検索を開始する場所を示す数値です。任意の整数にすることができ、デフォルト値は0です。
たとえば、x = ['g1 act car'] mです。x.indexOf( '')を実行する場合は、この配列の最初のスペース文字のインデックス値である2を見つける必要があります。
さらに
、検索対象の文字列searchValueが空の文字列の場合、「奇妙な」結果が生成されます。fromIndexの値が空の場合、またはfromIndexの値が検索対象の文字列の長さよりも短い場合、戻り値は以下のfromIndexの値と同じになります。
'hello world'.indexOf('') // 返回 0
'hello world'.indexOf('', 0) // 返回 0
'hello world'.indexOf('', 3) // 返回 3
'hello world'.indexOf('', 8) // 返回 8
fromIndex値が文字列の長さ以上の場合、文字列の長さ(str.length)を直接返します。
'hello world'.indexOf('', 11) // 返回 11
'hello world'.indexOf('', 13) // 返回 11
'hello world'.indexOf('', 22) // 返回 11
Array.prototype.slice()
スライス()メソッドは、新しい配列オブジェクトを返します。これは、開始と終了(開始は含むが終了は含まない)によって決定される元の配列の浅いコピーです。元の配列は変更されません。
例えば:
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]
console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]
console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]
したがって、これら3つの関数の学習を組み合わせることにより、このソートアルゴリズムの法則を見つけることができます。最初にindexOf( "")に従って
現在のarr1を並べ替えます
。arr1[0]とarr1 [1]の場合、対応するx.indexOf( '')= 2、y.indexOf( '')= 3が見つかります。
次に、x.slice(x.indexOf( ''))によれば、y.slice(y.indexOf( ''))はx.slice(2)、y.slice(3)と同等です。
x.slice(2)= [act zoo]
y.slice(3)= [オフキードッグ]
最終的な並べ替えは
、x.slice(2)= [act zoo] <y.slice(3)= [off key dog]?-1:1の場合に判断されます。
a <o、[actzoo]は[offkeydog]の前にランク付けされているためです。
残りなどは、最終結果を取得します。