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
相关产品推荐
相关产品推荐

