How can I flatten the 2 dimensions array int originalArray[][]
to 1 dimension array?
int a [] = {1,2,6,7,2};
int b [] = {2,44,55,2};
int c [] = {2,44,511,33};
int originalArray [][] = new array[][]{a,b,c};
How can I flatten the 2 dimensions array int originalArray[][]
to 1 dimension array?
int a [] = {1,2,6,7,2};
int b [] = {2,44,55,2};
int c [] = {2,44,511,33};
int originalArray [][] = new array[][]{a,b,c};
Count the total number of elements in originalArray. Create new array of that length. Copy elements one by one into the new array.
I am unfamiliar with any library function to do so.
There will be 2 steps:
1) find out total number of elements to create a new vector (1d array)
2) iterate through your 2d array in predefined order and copy its elements to the created vector
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;
}
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;
}
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):
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):
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);
With Guava, you can use either
int[] all = Ints.concat(originalArray);
or
int[] all = Ints.concat(a, b, c);