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

C# DataTable按RANK列重排序算法实现求助

C# DataTable 按RANK列重排序实现方案

核心逻辑是根据目标行的新旧RANK值,调整其他行的RANK以保持连续序列,最后按RANK排序表格:

  1. RANK调整规则:

    • 若新RANK大于旧RANK:将旧RANK+1到新RANK之间的所有行的RANK值减1,给目标行腾出位置
    • 若新RANK小于旧RANK:将新RANK到旧RANK-1之间的所有行的RANK值加1,为目标行让位
  2. 代码实现:

public DataTable ReorderDataTableByRank(DataTable originalTable, int oldRank, int newRank, string rankColumn = "RANK")
{
    // 复制原表格,避免修改原始数据
    DataTable newTable = originalTable.Copy();
    newTable.AcceptChanges();

    // 获取要修改的目标行
    DataRow targetRow = newTable.AsEnumerable()
                                .FirstOrDefault(row => row.Field<int>(rankColumn) == oldRank);
    if (targetRow == null) return newTable;

    // 调整其他行的RANK值
    if (newRank > oldRank)
    {
        // 旧RANK+1 到 新RANK 之间的行,RANK减1
        foreach (DataRow row in newTable.AsEnumerable()
                                        .Where(r => r.Field<int>(rankColumn) > oldRank && r.Field<int>(rankColumn) <= newRank))
        {
            row.SetField(rankColumn, row.Field<int>(rankColumn) - 1);
        }
    }
    else if (newRank < oldRank)
    {
        // 新RANK 到 旧RANK-1 之间的行,RANK加1
        foreach (DataRow row in newTable.AsEnumerable()
                                        .Where(r => r.Field<int>(rankColumn) >= newRank && r.Field<int>(rankColumn) < oldRank))
        {
            row.SetField(rankColumn, row.Field<int>(rankColumn) + 1);
        }
    }
    // 新旧RANK相同,无需调整
    else
    {
        return newTable;
    }

    // 设置目标行的新RANK
    targetRow.SetField(rankColumn, newRank);

    // 按RANK列重新排序
    newTable.DefaultView.Sort = $"{rankColumn} ASC";
    DataTable sortedTable = newTable.DefaultView.ToTable();

    return sortedTable;
}
  1. 验证示例:
  • 初始表格:
1  A
2  B
3  C
4  D
5  E
  • 调用ReorderDataTableByRank(originalTable, 3, 5)后,输出:
1  A
2  B
3  D
4  E
5  C
  • 调用ReorderDataTableByRank(originalTable, 3, 2)后,输出:
1  A
2  C
3  B
4  D
5  E

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:52:13