並べ替え

13354 ワード

sortを学ぶきっかけ


過去に解いたアルゴリズムを復習する中で...文字列をソートする場合、[a,ab]配列の2つの要素を比較すると、まず大文字をソートする問題になり、このときも書くことが分からないようです.

?? これは何ですか.

自分がGoogleをコピーした過去を反省して、知って書くべきだったのですが、ソート問題をするたびに、いつまで検索したいのか、今回のブログ記事のテーマを選びました!

sortメソッドとは?


配列要素の順序を変更するために配列が提供する高次関数.

  • デフォルトでは、要素を昇順にソートします(sortメソッドを使用して要素を降順にソートし、reverse()を適用するのは簡単です).

  • 文字列内のUnicodeコードポイントの順序に基づく

  • 使用時に元のアレイのソートを変更する
  • sort比較


    1)数値ソート


    数値ソートはsort()を使用できませんか?


    配列の要素は数値ですが、一時的に文字列に変換し、位置合わせを決定します.
    const nums = [5, 7, 2, 10];
    nums.sort();
    console.log(nums); // [ 10, 2, 5, 7 ]
    
    👩‍🏫 ソリューション
    (1)ソート順を定義する比較関数をパラメータとしてsortメソッドに渡す
    (2)比較関数は正/負/0を返す
  • 0未満の場合、比較関数の最初の引数(num 1)が優先的にソートされ、
  • が優先的にソートされる.
  • 0より大きい場合、2番目のパラメータ(num 2)
  • を優先的にソートする.
  • 0並べ替えなし
  • 比較関数の戻り値が0未満の場合はnum 1を最初にソートします.
    const nums = [5, 7, 2, 10];
    nums.sort((num1, num2) => num1 - num2); // 산술 연산자를 이용 
    console.log(nums);// [ 2, 5, 7, 10 ]

    2)並べ替えのデータ型が分からない


    実際、自分でプログラミングを行うと、ソート時にすべてのデータ型が認識されず、ほとんどの場合、オブジェクトタイプが使用されます.
    その时、私たちは実習を通じてどのようにソートするかを知りました!!
    📌 各入力のPropertyキーに学生オブジェクトを出力しようとします
    
    
    const students = [
      { id: 3, name: 'sian', register: true },
      { id: 2, name: 'minzy', register: false },
      { id: 1, name: 'hanna', register: false },
    ];
    
    const sortStudy = (students, key) =>
      [...students].sort((student1, student2) =>
        student1[key] > student2[key] ? 1 : student1[key] < student2[key] ? -1 : 0
      ); 
    
    console.log(sortStudy(students, 'id'));
    console.log(sortStudy(students, 'name'));
    console.log(sortStudy(students, 'register'));
    
    結果
    [
      { id: 1, name: 'hanna', register: false },
      { id: 2, name: 'minzy', register: false },
      { id: 3, name: 'sian', register: true }
    ]
    [
      { id: 1, name: 'hanna', register: false },
      { id: 2, name: 'minzy', register: false },
      { id: 3, name: 'sian', register: true }
    ]
    [
      { id: 2, name: 'minzy', register: false },
      { id: 1, name: 'hanna', register: false },
      { id: 3, name: 'sian', register: true }
    ]
    
    
    👩‍🏫 ソリューション
    演算子(たとえば、Property値が文字列の場合)を使用すると、NANが表示され、比較演算子=>=が使用されます.

  • Askyコードの値を比較する場合、最初のパラメータが2番目のパラメータより大きい場合は?もしそうなら、最初の買収に後退(-1処理)

  • 2番目のパラメータが1番目のパラメータより大きい場合は変化しません(1で処理)

  • 2つの引数のAskyコード値が同じ場合は0とします.
    (2つの買収を処理してもswapは発生しない!!同様に、swapが発生したらどうなるかと思っていたが、変わらず、より明確なのは明示的な処理)
  • 📌 booleanタイプも(「false」,「true」)文字列処理でアスキーコードを比較するのでfalseが先に来ます
    👩‍💻[...students]を使用してスプレッドシートを処理するのは、sortがソースコードを変更する方法であるため、コピーを作成して変更した後、矢印関数の戻り値に値を渡します.

    n/a.結論


    将来のアルゴリズムやアプリケーション開発では、ソートが非常に重要な役割を果たします.
    データ型を知って処理することはほとんどないでしょう...そこで,すべてのデータを処理できるソースコードの作成を学習している.

    Reference


    モダンJavaScript-アレイ高次関数
    MDN-Array.prototype.sort()