Heim > Artikel > Backend-Entwicklung > javascript - Wie ermittelt man für olympische Medaillen die nationale Rangliste in der Reihenfolge Gold, Silber und Bronze (Einzelheiten finden Sie im Titel)
Die Struktur der Daten ist ungefähr so
<code> $arr = [ ['name'=>'国家一','score'=>[10,7,5]], ['name'=>'国家二','score'=>[10,9,5]], ['name'=>'国家三','score'=>[11,7,5]], ['name'=>'国家四','score'=>[10,7,9]], ]; </code>
Die Sortierregel besteht darin, zuerst Goldmedaillen zu vergleichen. Goldmedaillen sind immer besser als Silbermedaillen, Silbermedaillen sind immer besser als Bronzemedaillen, Bronzemedaillen sind immer besser als id und id ist die anfängliche Array-Nummer
Die drei Zahlen in der Punktzahl repräsentieren jeweils die Menge an Gold, Silber und Kupfer
Wenn weniger Anforderungen für die Verwendung integrierter Funktionen bestehen, verwenden Sie am besten PHP, um diese zu implementieren
Die Struktur der Daten ist ungefähr so
<code> $arr = [ ['name'=>'国家一','score'=>[10,7,5]], ['name'=>'国家二','score'=>[10,9,5]], ['name'=>'国家三','score'=>[11,7,5]], ['name'=>'国家四','score'=>[10,7,9]], ]; </code>
Die Sortierregel besteht darin, zuerst Goldmedaillen zu vergleichen. Goldmedaillen sind immer besser als Silbermedaillen, Silbermedaillen sind immer besser als Bronzemedaillen, Bronzemedaillen sind immer besser als id und id ist die anfängliche Array-Nummer
Die drei Zahlen in der Punktzahl repräsentieren jeweils die Menge an Gold, Silber und Kupfer
Wenn weniger Anforderungen für die Verwendung integrierter Funktionen bestehen, verwenden Sie am besten PHP, um diese zu implementieren
Es gibt drei Zahlen, die die Anzahl der Medaillen darstellen. Können Sie mir wenigstens sagen, wie die Sortierregeln lauten?
Ist es die Gesamtzahl der Medaillen? Nach Gold, Silber bzw. Kupfer? Oder eine seltsame Permutation?
Es gibt viele Möglichkeiten, viermal direkt zu vergleichen, diejenigen mit derselben Goldmedaille auszuwählen und dann unter denselben nach Silbermedaille zu sortieren ... und so weiter
Wenn Sie sie auf einmal sortieren möchten, ändern Sie einfach die Seriennummern von Gold, Silber und Kupfer in eine Nummer, um sie zu sortieren.
Ihr Array kann beispielsweise so aussehen:—
<code>[010007005001,010009005002,011007005003,010007009004]</code>
Die Regeln sind sehr einfach. Geben Sie die Gold-, Silber- und Kupfer-Seriennummern dreistellig ein und fügen Sie sie dann direkt zusammen. Sortieren Sie dann einfach die Zahlengruppe, und das Ganze wird auf einmal erledigt.
PHP array_multisort implementiert die Sortierung nach mehreren Feldern wie SQL ORDER BY.
Zum Beispiel wird die olympische Medaillenliste in absteigender Reihenfolge nach der Anzahl der Goldmedaillen, Silbermedaillen und Bronzemedaillen sortiert.
<code><?php header('Content-Type: text/plain; charset=utf-8'); $arr = array( '中国' => array( '金牌' => 8, '银牌' => 3, '铜牌' => 6, ), '俄罗斯' => array( '金牌' => 3, '银牌' => 6, '铜牌' => 3, ), '美国' => array( '金牌' => 6, '银牌' => 8, '铜牌' => 8, ), '澳大利亚' => array( '金牌' => 4, '银牌' => 0, '铜牌' => 4, ), '意大利' => array( '金牌' => 3, '银牌' => 4, '铜牌' => 2, ), ); // 实现 ORDER BY foreach($arr as $k => $v) { $sort['金牌'][$k] = $v['金牌']; $sort['银牌'][$k] = $v['银牌']; $sort['铜牌'][$k] = $v['铜牌']; } array_multisort( $sort['金牌'], SORT_DESC, $sort['银牌'], SORT_DESC, $sort['铜牌'], SORT_DESC, $arr); var_export($arr);</code>
Lassen Sie uns eine Python-Version erstellen, unter der Annahme, dass die Anzahl jeder Medaillenart in jedem Land 999 nicht überschreitet.
<code>arr = [ {'name':'国家一','score':[10,7,5]}, {'name':'国家二','score':[10,9,5]}, {'name':'国家三','score':[11,7,5]}, {'name':'国家四','score':[10,7,9]}, ] print sorted(arr, key=lambda a: '%03d%03d%03d' % tuple(a['score']), reverse=True)</code>
Die Bewertung wird am besten während des Entwurfs getrennt.
Entwerfen Sie eine Klasse (einschließlich Länder-, Gold-, Silber- und Bronzezahlen), implementieren Sie die Comparable-Schnittstelle und implementieren Sie die Vergleichsmethode gemäß den von Ihnen beschriebenen Regeln. Ist es nicht einfach?
Die ID der Goldmedaille, der Silbermedaille und der Bronzemedaille bildet eine Zahl und sortiert sie dann direkt, zum Beispiel id13-[10, 2, 20] bildet 10022013 und sortiert sie dann direkt nach dieser Zahl