【问题标题】:Create a 2D Matrix X[][] with letters on X axis and numbers on Y Axis创建一个二维矩阵 X[][],X 轴上带有字母,Y 轴上带有数字
【发布时间】:2018-06-06 09:19:54
【问题描述】:

我正在尝试创建一个如下所示的二维矩阵。 我无法找到方法,请帮助我。

伪代码会很有帮助。

普通 x[3][5] 二维矩阵:

[00][01][02][03][04]
[10][11][12][13][14]
[20][21][22][23][24]

我要创建的是 x[C][5]

[A0][A1][A2][A3][A4]
[B0][B1][B2][B3][B4]
[C0][C1][C2][C3][C4]

【问题讨论】:

  • 用什么语言?大多数不支持自定义索引,但您可以创建一个内部具有二维数组的类,其中包含接受字母的 getter 和 setter 方法。
  • @ElanHamburger C#

标签: c# algorithm multidimensional-array


【解决方案1】:

这不是您正在寻找的语法,但我认为它会满足您的需求。为了获得您想要的行为,您需要创建一个存储二维矩阵并重载[] 运算符以接受char 而不是int 的类

public class Matrix<T> {
    private T[,] arr;

    public Matrix(int x, int y) {
        arr = new T[x, y];
    }

    public T this[char c, int i] {
        get { return arr[c - 'A', i]; }
        set { arr[c - 'A', i] = value; }
    }
}

如您所见,代码实际上非常简单。它利用char 数据类型保存其字母的ASCII 值这一事实。通过减去“A”,我们可以使用“A”作为 0,“B”作为 1,等等。然后您可以使用如下字符调用您的矩阵:

Matrix<int> m = new Matrix<int>(3,4); // Creates a 3 x 4 matrix of ints
m['B',3] = 4;                         // m[1,3] = 4

编辑

如果您愿意,您还可以修改构造函数以接受char

public Matrix(char x, int y) {
    arr = new T[x - 'A' + 1, y];
}

请注意,您用于初始化的字符(如数组的整数初始化器)是条目的个数,因此比最高索引大一。

Matrix<int> m = new Matrix<int>('C',4); // Creates a 3 x 4 matrix of ints
m['B',3] = 4;                           // m[1,3] = 4

【讨论】:

    最近更新 更多