javascript - 奥运会的奖牌,如何实现按金银铜多少顺序决定国家排位(详见题目)

WBOY
Freigeben: 2016-10-10 11:56:10
Original
2177 Leute haben es durchsucht

数据的结构大概是这样

<code> $arr = [
          ['name'=>'国家一','score'=>[10,7,5]],
          ['name'=>'国家二','score'=>[10,9,5]],
          ['name'=>'国家三','score'=>[11,7,5]],
          ['name'=>'国家四','score'=>[10,7,9]],
        ];
</code>
Nach dem Login kopieren
Nach dem Login kopieren

排序的规则是,先比金牌,金牌一致比银牌,银牌一致比铜牌,铜牌一致比id,id就是初始的数组序号

score中的三个数字分别代表金,银,铜的数量

要求较少的用到内置函数,最好用php实现

回复内容:

数据的结构大概是这样

<code> $arr = [
          ['name'=>'国家一','score'=>[10,7,5]],
          ['name'=>'国家二','score'=>[10,9,5]],
          ['name'=>'国家三','score'=>[11,7,5]],
          ['name'=>'国家四','score'=>[10,7,9]],
        ];
</code>
Nach dem Login kopieren
Nach dem Login kopieren

排序的规则是,先比金牌,金牌一致比银牌,银牌一致比铜牌,铜牌一致比id,id就是初始的数组序号

score中的三个数字分别代表金,银,铜的数量

要求较少的用到内置函数,最好用php实现

代表奖牌数量的有三个数字,你至少说说排序的规则是什么样子的吧

是总的奖牌数量?分别按照金银铜?还是什么奇怪的排列组合?


办法挺多的,比较懒的办法就是直接比四次,先按照金牌排序,选出金牌一样的,再在相同的里面按照银牌排序……以此类推就行了

想要一次性就排序好的话,那就把金银铜序号,变成一个数字来排序就行了。
比如,你的这个数组可以变成这样——

<code>[010007005001,010009005002,011007005003,010007009004]</code>
Nach dem Login kopieren

规则很简单,金银铜序号填充至三位,然后直接拼接起来,最后直接对这组数字进行排序就行了,一次到位。

PHP array_multisort实现像SQL ORDER BY那样按多个字段排序.
比如奥运奖牌榜,依次按金牌,银牌,铜牌的数目进行降序排序.

<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>
Nach dem Login kopieren

来个python版的,假设每个国家每种奖牌数不会超过999。

<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>
Nach dem Login kopieren

score在设计时最好分开。
设计一个类(含国家,金,银,铜数),实现Comparable接口,按你所描述的规则实现compare方法。这不是很简单吗?

金牌+银牌+铜牌+id组成一个数字然后排序然后直接排序,如id13-【10,2,20】组成10022013,然后根据这个数字直接排序即可

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!