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

C#中基于25元素整数List生成打印特殊5x5棋盘的最优方案

最优实现方案

针对你的需求,最适合的方案是使用预定义索引映射表,既可以保留原有List底层存储逻辑,又能高效适配特殊的棋盘索引规则,实现成本和性能开销都极低。

1. 预定义静态映射数组

首先根据你的棋盘索引规则,预先构造「棋盘显示索引→底层List存储索引」的映射关系,数组长度固定为25,只需初始化一次即可全局复用:

// 数组下标:对应特殊规则下的棋盘索引(即B(b)的0~24位)
// 数组值:对应底层List<int>中的实际存储下标(即B(a)的索引)
private static readonly int[] _boardMap = new int[25]
{
    // 请按B(b)从0到24的顺序,依次填入对应B(a)的索引值即可
    // 例:你提到B(b)[6]对应B(a)[7],所以数组第7位(下标为6)填入7
    24,23,22,21,20,
    19,18,17,16,15,
    14,13,7,11,10,
    9,8,6,5,4,
    3,2,1,0,12
    // 以上为示例值,对照你的索引规则替换为正确的25个映射值即可
};

2. 实现棋盘打印方法

需要打印棋盘时,直接按行遍历映射表取值即可,完全无需修改原有存储逻辑:

public void PrintSpecialBoard(List<int> underlyingList)
{
    for (int row = 0; row < 5; row++)
    {
        for (int col = 0; col < 5; col++)
        {
            int displayIdx = row * 5 + col;
            int realValue = underlyingList[_boardMap[displayIdx]];
            Console.Write($"{realValue}\t");
        }
        Console.WriteLine();
    }
}

3. 可选扩展:封装索引取值方法

如果业务逻辑中需要频繁按特殊棋盘索引取值,可以封装扩展方法简化调用:

public static class BoardExtension
{
    private static readonly int[] _boardMap = new int[25] { /* 填入正确的映射关系 */ };

    public static int GetBoardValue(this List<int> list, int specialIndex)
    {
        if (specialIndex is < 0 or >= 25)
            throw new ArgumentOutOfRangeException(nameof(specialIndex), "索引必须在0~24范围内");
        return list[_boardMap[specialIndex]];
    }
}

// 调用示例:获取B(b)[6]对应的值
int value = x.GetBoardValue(6);

方案优势

  • 性能极高:映射表寻址为O(1)操作,无额外计算开销,完全适配游戏高频调用场景
  • 逻辑解耦:底层存储和上层显示逻辑完全分离,后续调整棋盘索引规则只需修改映射表即可,无需改动业务代码
  • 易维护:映射规则一目了然,排查索引错误的成本远低于动态坐标转换公式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:06:03