【发布时间】:2018-11-13 17:29:03
【问题描述】:
我想检查 C# 中 3x3 2D 矩阵上井字游戏的胜利。我有以下结构:
public struct GridCoordinates {
public int row;
public int column;
}
为了检查电路板的所有行、列和对角线,我可以执行以下操作。我可以创建一个预先计算的List<List<GridCoordinates>>,其中内部列表是 3 个坐标的集合,每个坐标代表一行、列或对角线。但是当我想到 List<List<GridCoordinates>> 的初始化将使用 news 时,我开始认为在 C# 中应该有更好的方法。请建议如何优雅地填充预先计算的坐标。
我的 BG 来自 C++,在那里我可以做这样的事情:
#include <iostream>
#include <vector> using namespace std;
struct GridCoordinates {
int i;
int j;
};
vector<vector<GridCoordinates>> vec{
{{0,0}, {0,1}, {0, 2}}
};
int main() { std::cout << vec[0][2].j; }
优雅,对吧?
【问题讨论】:
-
除非你的游戏要在游戏中期改变棋盘大小,否则没有理由在这里使用
List而不是多维数组(new GridCoordinates[,] { ... }甚至new (int row, int column)[,] { ... },利用元组)。 -
嵌套列表声明只是稍长一些 - 避免这种情况似乎是寻找不太明显的东西的一个不好的理由。