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)

javascript - Wie ermittelt man für olympische Medaillen die nationale Rangliste in der Reihenfolge Gold, Silber und Bronze (Einzelheiten finden Sie im Titel)

WBOY
WBOYOriginal
2016-10-10 11:56:102218Durchsuche

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

Antwortinhalt:

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn