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

含重复值列表排名跳号问题:C#代码修正求助

解决方案

你的代码问题在于先给每个元素分配了连续序号(1+i),再通过分组取最小序号作为排名,这会导致重复值占用多个序号位置,后续元素的排名直接跳过这些位置,出现跳号。要实现重复值同排名、后续排名连续的需求,应该按值分组后给每个组分配排名,而非基于单个元素的初始序号。

修改后的代码

var rankedList = oList
    .OrderByDescending(p => p.QTECDE) // 先按QTECDE降序排序,确保相同值的元素相邻
    .GroupBy(p => p.QTECDE) // 按QTECDE分组,组的顺序保持排序后的降序
    .Select((group, groupIndex) => new 
    {
        Rank = groupIndex + 1, // 给每个组分配连续排名(组索引从0开始,+1转为从1开始)
        Items = group
    })
    .SelectMany(g => g.Items.Select(item => new 
    {
        RANK = g.Rank,
        NO_ART = item.NO_ART,
        QTECDE = item.QTECDE,
        LIB_INDEX_FR_SUP = item.LIB_NIVEAU_SUP_FR,
        LIB_IMAGE = item.LIB_IMAGE // 修正原代码中可能的笔误,确保取元素自身的LIB_IMAGE
    }));

逻辑说明

  1. 排序分组:先对原列表按QTECDE降序排序,保证相同值的元素集中在一起,再按QTECDE分组,组的顺序就是值从大到小的顺序。
  2. 组级排名:通过Select((group, groupIndex))给每个组分配排名,groupIndex+1确保排名从1开始且连续,不管每个组包含多少元素。
  3. 展开元素:用SelectMany将每个组的元素展开,每个元素都继承所在组的排名,实现重复值同排名、后续排名无跳号的效果。

内容的提问来源于stack exchange,提问作者Siwar Hadj Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:21:34