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

如何使用OrderBy列表追踪竞速游戏车辆位置 支持基于圈数的排名

问题根源

  • 原有排序规则优先级错误,未将圈数这个最高优先级的排序维度纳入逻辑,跨圈场景下自然无法正确区分玩家进度
  • Linq 中连续调用 OrderBy 会重置排序逻辑,前序的排序规则会被后续的 OrderBy 完全覆盖,原有代码里的距离排序其实没有生效,需要用 ThenBy/ThenByDescending 追加次级排序条件

修复方案

假设你已实现的已完成圈数字段为 completedLaps,可直接按如下逻辑修改排序代码:

IOrderedEnumerable<KeyValuePair<string, Player>> sortedPlayer = players
    // 第一优先级:已完成圈数降序,圈数越多排名越靠前
    .OrderByDescending(x => x.Value.completedLaps)
    // 第二优先级:当前激活路点索引降序,同圈数下路过的路点越多排名越靠前
    .ThenByDescending(x => x.Value.activeWaypointIndex)
    // 第三优先级:到当前路点的距离升序,同圈数同路点下离路点越近排名越靠前
    .ThenBy(x => x.Value.distanceToWaypoint);

逻辑验证

比如总路点为10的场景下:

  • 跑了2圈、当前在1号路点的玩家,圈数大于跑了1圈在10号路点的玩家,会排在前面
  • 同圈数下,在10号路点的玩家比在1号路点的玩家排名更高,符合竞速进度规则
  • 同圈数同路点的玩家,离当前路点更近的排名更高,准确体现短距离的先后差距

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:15:04