表示具有列/行标签的矩阵
Posted
技术标签:
【中文标题】表示具有列/行标签的矩阵【英文标题】:representing a matrix with column/row labels 【发布时间】:2018-12-06 01:43:05 【问题描述】:我想用 Java 创建一个二维数组,或者一个带有 int 数字的矩阵。
我已经这样做了..但我仍然不知道如何为行/列分配标签。
我希望能够根据行/列访问矩阵内的任何数字
这是我的java代码
Gson gson = new Gson();
int[][] data = 78, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 11;
String json = gson.toJson(data);
// Convert JSON string into multidimensional array of int.
int[][] dataHeatMap = gson.fromJson(json, int[][].class);
for (int[] i : dataHeatMap)
for (int j : i)
System.out.print(j + " ");
System.out.println("");
return json;
【问题讨论】:
标签是什么意思?例如,您希望以 [b][h] 形式而不是 [1][2] 形式访问数据? 确实希望能够根据行/列访问矩阵内的任何数字 不能用数字代替字母有什么原因吗? 嘿 Kepotx,是的,因为这些标签存储在数据库中,需要检索值。我仍然可以映射它们..但如果有办法直接使用标签会更好 【参考方案1】:你可以使用Enum
s:
public enum ROW a, b, c, d, e
public enum COL f, g, h, i, j
data[ROW.a.ordinal()][COL.f.ordinal()] = 3;
【讨论】:
您的枚举类型不能代表设置索引所需的int
。枚举需要获得一个代表索引的文件。 a=0, b=1,..
已修复。每个枚举都有一个序号
我知道,但我更喜欢更好的可读性和自定义的方式。但你是对的。 +
好吧,我不知道。 Java 已经太冗长了。详细!=可读【参考方案2】:
使用代表 2dim 数组的特殊索引的 ENUM
类型。给它们一个名为value
/name
/... 的字段,并使用它们在数组中的索引创建它们。之后,您可以通过获取代表数组索引的字母值来轻松调用它们。
它非常易读,ENUM.<VALUE>
不代表 INT
值。所以这就是你可以做到的方式。
public enum ROW
A(0), B(1), C(2), D(3), E(4);
private final int value;
ROW(int value) this.value = value;
public int getValue() return value;
public enum COL
F(0), G(1), H(2), I(3), J(4);
private final int value;
COL(int value) this.value = value;
public int getValue() return value;
public static void main(String []args)
int[][] matrix = 78, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 11;
System.out.println("Value: " + matrix[ROW.A.getValue()][COL.F.getValue()]);
我更喜欢上面的方式,因为您可以看到直接发生的事情并且可以分配您想要的任何值。但是你也可以使用 ENUM.ordinal()。
然后data[ROW.a.ordinal()][...]
将为 ROW 返回 0,因为它首先列出。 b 将返回 1,... 这仅取决于它们在 ENUM
上列出/创建的方式。
【讨论】:
不需要 int 值。每个枚举都有一个隐含的 int 序数值 您的回答并未在我提供的信息中添加任何新信息。这是我的答案的重复 @SharonBenAsher 它清楚地显示了这两种解决方案之间的区别,并提供了描述/示例。几年后,发展中的业务后端我真的知道所有 PO/Devs 都希望它是第一种方式。它更具可读性,无需文档即可清晰理解,并且可 100% 扩展/自定义。 Java 开发人员应该知道enum
的工作原理以及这种语言结构的功能。向枚举添加自定义序数值简直是多余的,并提出了一个问题,为什么需要它而不是语言特性。
@SharonBenAsher 但是如果您想将它们称为“A”或 100 200 而不是 0、1、.. 怎么办?有了自己的新领域,很容易实现这个目标。它经常被使用,并没有太多理解/更多的工作来做到这一点。对我来说,这并不重要 - 两者都在工作。以上是关于表示具有列/行标签的矩阵的主要内容,如果未能解决你的问题,请参考以下文章