Java 如何将二维数组展平为一维数组?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2569279/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to flatten 2D array to 1D array?
提问by Jessy
How can I flatten the 2 dimensions array int originalArray[][]
to 1 dimension array?
如何将二维数组展平int originalArray[][]
为一维数组?
int a [] = {1,2,6,7,2};
int b [] = {2,44,55,2};
int c [] = {2,44,511,33};
int originalArray [][] = new int[][]{a,b,c};
采纳答案by rsp
A simple for loop will do, it is not difficult, but will depend on the order you wat to copy the values. For instance (based on the fact that in your example the arrays all have the same length):
一个简单的 for 循环就可以了,这并不困难,但将取决于您复制值的顺序。例如(基于在您的示例中数组都具有相同长度的事实):
int[] newArray = new int[3 * a.length];
int index = 0;
for (int n = 0; n < a.length; n++) {
newArray[index++] = a[n];
newArray[index++] = b[n];
newArray[index++] = c[n];
}
or (different order, a, b, c can be of different lengths):
或(不同的顺序,a、b、c 可以是不同的长度):
int[] newArray = new int[a.length + b.length + c.length];
System.arraycopy(a, 0, newArray, 0, a.length);
System.arraycopy(b, 0, newArray, a.length, b.length);
System.arraycopy(c, 0, newArray, a.length + b.length, c.length);
回答by Thorbj?rn Ravn Andersen
Count the total number of elements in originalArray. Create new array of that length. Copy elements one by one into the new array.
计算 originalArray 中元素的总数。创建该长度的新数组。将元素一一复制到新数组中。
I am unfamiliar with any library function to do so.
我不熟悉这样做的任何库函数。
回答by Roman
There will be 2 steps:
会有2个步骤:
1) find out total number of elements to create a new vector (1d array)
1)找出创建新向量(一维数组)的元素总数
2) iterate through your 2d array in predefined order and copy its elements to the created vector
2)以预定义的顺序遍历您的二维数组并将其元素复制到创建的向量
int elementsNumber = 0;
for (int i = 0; i < originalArray.length; i++) {
elementsNumber += originalArray[i].length;
}
int[] newArray = new int[elementsNumber];
int j = 0;
for (int i = 0; i < originalArray.length; i++) {
System.arrayCopy (originalArray[i], 0, newArray, j, originalArray[i].length);
j += originalArray[i].length;
}
回答by phihag
Since arrays can't be extended (i.e. you have to declare the size of an error upon initialization), you have to traverse the arrays twice:
由于数组不能扩展(即你必须在初始化时声明错误的大小),你必须遍历数组两次:
int size = 0;
for (int[] ar : originalArray) size += ar.length;
int[] result = new int[size];
int pos = 0;
for (int[] ar : originalArray) {
System.arraycopy(ar, 0, result, pos, ar.length);
pos += ar.length;
}
回答by Kevin Bourrillion
回答by Nolesh
int[] oneDArray = new int[arr.length*arr.length];
//Flatten 2D array to 1D array...
int s = 0;
for(int i = 0; i < arr.length; i ++)
for(int j = 0; j < arr.length; j ++){
oneDArray[s] = arr[i][j];
s++;
}
回答by assylias
With Java 8 you can "flatMap" the inner arrays:
使用 Java 8,您可以“flatMap”内部数组:
int[] flatArray = Arrays.stream(originalArray)
.flatMapToInt(Arrays::stream)
.toArray();
or:
或者:
int[] flatArray = Stream.of(a, b, c)
.flatMapToInt(Arrays::stream)
.toArray();
回答by Kaplan
one-liner withIntStream
单线与IntStream
IntStream.concat(
IntStream.concat( IntStream.of(originalArray[0]), IntStream.of(originalArray[1]) ),
IntStream.of(originalArray[2]) ).toArray();
gets: [1, 2, 6, 7, 2, 2, 44, 55, 2, 2, 44, 511, 33]
得到: [1, 2, 6, 7, 2, 2, 44, 55, 2, 2, 44, 511, 33]