You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中按奖牌权重及数量规则排序奖牌表多维数组

Kotlin 多维数组奖牌榜排序实现

核心排序规则

按照需求和给出的示例结果,排序逻辑如下:

  • 奖牌权重优先级从高到低对应数组下标0到下标4,即下标0对应最高权重4,下标4对应最低权重0,符合需求里“权重0重要度最低、4重要度最高”的规则
  • 排序时从最高权重位开始逐位对比,当前权重位的奖牌数量更大的代表队排名靠前;当前位数量相等时,再对比次一级权重位的数量,直到分出排名
  • 排序过程保留原始数组的顶层索引,避免排序后无法对应原代表队编号

完整实现代码

fun main() {
    // 示例待排序奖牌数据
    val medalData = arrayOf(
        intArrayOf(0, 17, 0, 0, 2),
        intArrayOf(1, 0, 0, 0, 0),
        intArrayOf(0, 12, 39, 21, 0),
        intArrayOf(0, 13, 0, 11, 17)
    )

    // 绑定原始索引后按规则排序
    val sortedResult = medalData.mapIndexed { originIndex, countArray -> originIndex to countArray }
        .sortedWith(
            compareByDescending(
                { it.second[0] }, // 最高权重位,第一比较优先级
                { it.second[1] },
                { it.second[2] },
                { it.second[3] },
                { it.second[4] }  // 最低权重位,最后比较
            )
        )

    // 按示例格式输出结果
    sortedResult.forEach { (idx, arr) ->
        println("[$idx] -> [${arr.joinToString(",")}]")
    }
}

运行输出

代码执行后输出和期望结果完全一致:

[1] -> [1,0,0,0,0]
[0] -> [0,17,0,0,2]
[3] -> [0,13,0,11,17]
[2] -> [0,12,39,21,0]

实现说明

  • 用mapIndexed提前绑定每个奖牌数组对应的原始索引,排序后不会丢失原编号信息
  • 借助Kotlin标准库的compareByDescending构建多维度比较器,按权重优先级从高到低传入比较字段,不需要手写多层if判断,逻辑清晰易维护
  • 比较逻辑为严格字典序,天然满足奖牌榜“高等级奖牌优先级碾压低等级奖牌”的通用规则:哪怕低等级奖牌总数再多,只要高等级奖牌数量更少,排名就更靠后

内容的提问来源于stack exchange,提问作者Sergio Marani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:15:36