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

C#如何在控制台箭头导航时获取选中二维数组的索引?

实现按下回车获取选中元素的索引

完全可以实现,核心是把当前光标位置(vertical和horizontal)转换成二维数组ChessBoard的行列索引,具体实现如下:

1. 对应关系分析

  • 行索引:vertical变量直接对应数组的行索引——它的范围是0到7(和棋盘8行匹配),光标行位置就是数组的行号,直接用arrayRow = vertical即可。
  • 列索引:根据你光标左右移动的逻辑,初始horizontal=0对应第0列,之后每次右移加3(第一次从0到4,后续每次+3),所以列索引按以下规则计算:
    • 当horizontal == 0时,列索引为0;
    • 其他情况,列索引 = (horizontal - 1) / 3(验证:horizontal=4时(4-1)/3=1对应第1列,horizontal=7时(7-1)/3=2对应第2列,以此类推)。

2. 修改Enter按键分支代码

在ConsoleKey.Enter的分支中添加索引计算逻辑,示例代码如下:

else if (choice.Key == ConsoleKey.Enter)
{
    // 计算二维数组的行索引
    int arrayRow = vertical;
    // 计算二维数组的列索引
    int arrayCol;
    if (horizontal == 0)
    {
        arrayCol = 0;
    }
    else
    {
        arrayCol = (horizontal - 1) / 3;
    }

    // 可选:验证索引是否在数组有效范围内,避免越界
    if (arrayRow >= 0 && arrayRow < ChessBoard.GetLength(0) 
        && arrayCol >= 0 && arrayCol < ChessBoard.GetLength(1))
    {
        // 获取选中的元素
        string selectedElement = ChessBoard[arrayRow, arrayCol];
        // 这里可以根据需求处理索引或元素,比如打印输出
        Console.WriteLine($"选中元素:行[{arrayRow}],列[{arrayCol}],内容:{selectedElement}");
        // 如果需要退出导航循环,可设置exit = true;
        // exit = true;
    }
    else
    {
        Console.WriteLine("当前光标位置对应无效的数组索引");
    }
}

3. 额外说明

  • 如果棋盘列数不是8,需要根据horizontal的实际取值范围调整列索引的计算公式;
  • 若要将索引传递到方法外部,可以修改方法返回值(比如返回Tuple<int, int>),或者通过out参数传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:35:03