表示具有列/行标签的矩阵

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】:

你可以使用Enums:

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、.. 怎么办?有了自己的新领域,很容易实现这个目标。它经常被使用,并没有太多理解/更多的工作来做到这一点。对我来说,这并不重要 - 两者都在工作。

以上是关于表示具有列/行标签的矩阵的主要内容,如果未能解决你的问题,请参考以下文章

向量乘矩阵表示啥?

怎么用MATLAB表示100*100矩阵(行从1到100,列从1到100)?

matlab预备知识

Matlab中数组元素为矩阵怎样表示

具有一维向量的矩阵

Matlab在matlab绘制渐变混淆矩阵