데이터의 구조는 대략 이렇습니다
<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을 구성하고 이 숫자에 따라 직접 정렬합니다.