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

Lua按plCP值排序racers数组并设置plPos名次的技术问询

解决数组排序并设置并列名次的方案

没问题,我来帮你实现这个需求——按plCP降序排序数组,同时给每个元素设置对应的plPos名次,并且让plCP相同的元素拥有相同的名次。

实现步骤拆解

  • 第一步:按plCP降序排序数组
    从你的示例能看出来,plCP值越高,名次越靠前,所以我们需要把数组按plCP从大到小排序。
  • 第二步:遍历排序后的数组,设置并列名次
    排序后不能直接用索引+1当名次(这样并列的元素会有不同名次),我们需要对比当前元素和前一个元素的plCP值,相同就沿用之前的名次,不同则更新名次为当前位置+1。

代码示例(以JavaScript为例)

假设你的数组是JavaScript对象数组,代码如下:

// 你的原始数组示例(这里用5个元素模拟,32个元素逻辑完全一致)
const racers = [
  { plCP: 3, plPos: 0 },
  { plCP: 2, plPos: 0 },
  { plCP: 6, plPos: 0 },
  { plCP: 12, plPos: 0 },
  { plCP: 6, plPos: 0 }
];

// 按plCP降序排序数组
racers.sort((a, b) => b.plCP - a.plCP);

// 设置并列名次
let currentRank = 1;
let previousCP = racers[0].plCP; // 初始化为第一个元素的plCP值

racers.forEach((racer, index) => {
  // 如果当前元素的plCP和前一个不同,更新名次
  if (racer.plCP !== previousCP) {
    currentRank = index + 1;
    previousCP = racer.plCP;
  }
  // 给当前元素设置最终名次
  racer.plPos = currentRank;
});

// 输出验证结果
console.log(racers);

执行结果说明

运行上面的代码后,你会得到和示例完全匹配的结果:

  • plCP=12的元素plPos=1
  • 两个plCP=6的元素plPos=2
  • plCP=3的元素plPos=3
  • plCP=2的元素plPos=4

额外提示

  • 如果你用的是其他编程语言(比如Python、C#等),核心逻辑完全一致:先降序排序,再遍历处理并列名次,只是语法细节略有不同。
  • 对于空数组、只有单个元素、所有元素plCP都相同的边界情况,这段逻辑也能正常处理,不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:10:41