javascript - 올림픽 메달의 경우 금, 은, 동메달 순서에 따라 국가 순위를 결정하는 방법(자세한 내용은 제목 참조)

WBOY
풀어 주다: 2016-10-10 11:56:10
원래의
2177명이 탐색했습니다.

데이터의 구조는 대략 이렇습니다

<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는 초기 배열 일련번호입니다

점수에 있는 세 숫자는 각각 금, 은, 구리의 양을 나타냅니다.

내장 기능 사용에 대한 요구 사항이 적다면 PHP를 사용하여 구현하는 것이 가장 좋습니다

답글 내용:

데이터의 구조는 대략 이렇습니다

<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는 초기 배열 일련번호입니다

점수에 있는 세 숫자는 각각 금, 은, 구리의 양을 나타냅니다.

내장 기능 사용에 대한 요구 사항이 적다면 PHP를 사용하여 구현하는 것이 가장 좋습니다

메달 개수를 나타내는 숫자가 3개 있습니다. 정렬 규칙이 무엇인지 알려주실 수 있나요?

메달 총 개수인가요? 금, 은, 구리에 따라 각각? 아니면 이상한 순열?


게으른 방법은 4번을 직접 비교하는 방법이 있습니다. 먼저 금메달로 정렬하고, 동일한 금메달을 선택한 다음, 동일한 것 중에서 은메달로 정렬하는 식입니다. 🎜>

한 번에 정렬하고 싶다면 금, 은, 동 일련번호를 숫자로 바꿔서 정렬하면 됩니다.

예를 들어 배열은 다음과 같습니다.——

<code>[010007005001,010009005002,011007005003,010007009004]</code>
로그인 후 복사
규칙은 매우 간단합니다. 금, 은, 동 일련번호를 세자리로 입력한 후 직접 연결하면 됩니다. 마지막으로 숫자 그룹을 직접 정렬하면 한 번에 완료됩니다.

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>
로그인 후 복사

국가별 메달 종류별 개수가 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>
로그인 후 복사

디자인할 때 점수를 분리하는 것이 가장 좋습니다.

클래스(국가, 금, 은, 동 숫자 포함)를 디자인하고, Comparable 인터페이스를 구현하고, 설명한 규칙에 따라 비교 메서드를 구현하세요. 간단하지 않나요?

금메달+은메달+동메달+ID를 숫자로 구성한 후 직접 정렬합니다. 예를 들어 id13-[10, 2, 20]은 10022013을 구성하고 이 숫자에 따라 직접 정렬합니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!