• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-23) 14次浏览 已收录 0个评论
文章目录[隐藏]

数据的结构大概是这样

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

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

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

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

6本文来源gao@dai!ma.com搞$代^码!网7

搞gaodaima代码

回复内容:

数据的结构大概是这样

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

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

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

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

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

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


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

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

<code>[010007005001,010009005002,011007005003,010007009004]</code>

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

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

<code><?phpheader('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 BYforeach($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>

来个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>

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

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:javascript – 奥运会的奖牌,如何实现按金银铜多少顺序决定国家排位(详见题目)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址