为啥我不能像行一样简单地获得一维数组?
Posted
技术标签:
【中文标题】为啥我不能像行一样简单地获得一维数组?【英文标题】:Why can I not get a one dimensional array of a column as easy as a row?为什么我不能像行一样简单地获得一维数组? 【发布时间】:2018-10-25 22:06:57 【问题描述】:背景
这是一个二维数组。-
String[][] names = "Sam", "Smith", "Robert", "Delgro", "James", "Gosling", ;
我可以通过调用来访问这些行:
names[n]
其中 n 是边界之间的任何整数,在本例中为 0n。
同样
我可以这样称呼
String [] rowOne = names[0];
查询
现在问题仍然存在,而不是行,是否有一种方法可以访问 特定 列,就像访问 特定 行一样。
反馈
我想要对此建议的反馈。
在访问 2d 数组 中的列的特定情况下,names[][x]
将是调用特定列的声明,其中 0x.
String[] columnOne = names[][0]
这意味着names.length
将相当于调用names[][x].length
这也适用于数组大于而不是二维数组。
String[][][]names = "Sam", "Smith", "Robert", "Delgro", "James", "Gosling";
只需添加额外的方括号。
例如在一个 3d 数组中,访问一个过道,这就是我将提到的第三维。
names[][][z]
,其中 0z
一维数组来自多维数组。
【问题讨论】:
您建议的语法是完全合理的。事实上,其他一些语言(例如 APL)确实 提供了类似的功能。只是不是 Java。 【参考方案1】:...有没有办法像访问特定行一样访问特定列。
没有; Java 的多维数组本质上是包含对其他数组的引用的数组,这些数组在内存中并不连续。 Java 还允许数组是锯齿状的。假设您有以下多维数组:
int[][] array =
1, 2, 3,
4, 5,
6
;
致电array[][2]
,您希望收到什么? array[][3]
呢?
为了能够得到一个列数组,您需要先转置多维数组。
【讨论】:
使用我的语法建议,array[][2] = 3;
但array[][3]
将不存在,因为数组从索引 0 开始。我同意数组必须转置。有趣的是,在当前语法下,'array[2] = 6;` 在元素方面类似于 array[2][0] = 6;
。同样,使用建议的语法,array[][2] = 3;
就像 array[0][2] = 3
;.
@Paul 但是,如果交换行索引 0 和 1 处的数组,那么您建议的语法 array[][2]
将产生相同的结果,但是您丢失了索引,因此结果也必须包括null
,但不能用于基元数组。以上是关于为啥我不能像行一样简单地获得一维数组?的主要内容,如果未能解决你的问题,请参考以下文章
尽管没有一维数组,但在 Sklearn 中通过一维数组获得弃用警告