Comment aplatir un tableau 2D en tableau 1D?
Comment puis-je aplatir le tableau de 2 dimensions int originalArray[][]
1 dimension de tableau?
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};
7 réponses
un simple pour boucle fera l'affaire, ce n'est pas difficile, mais dépendra de l'ordre dans lequel vous voulez copier les valeurs. Par exemple (basé sur le fait que dans votre exemple, les tableaux ont tous la même longueur):
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];
}
ou (ordre différent, a, b, c peuvent être de longueurs différentes):
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);
Goyave, vous pouvez utiliser
int[] all = Ints.concat(originalArray);
ou
int[] all = Ints.concat(a, b, c);
int[] flatArray = Arrays.stream(originalArray)
.flatMapToInt(Arrays::stream)
.toArray();
ou:
int[] flatArray = Stream.of(a, b, c)
.flatMapToInt(Arrays::stream)
.toArray();
Il y aura 2 étapes:
1) trouver le nombre total d'éléments pour créer un nouveau vecteur (tableau 1d)
2) itérez votre tableau 2d dans un ordre prédéfini et copiez ses éléments dans le vecteur créé
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;
}
puisque les tableaux ne peuvent pas être étendus( i.e. vous devez déclarer la taille d'une erreur lors de l'initialisation), vous devez parcourir les tableaux deux fois:
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;
}
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++;
}
Compter le nombre total d'éléments dans originalArray. Créer un nouveau tableau de cette longueur. Copier les éléments un par un dans le nouveau tableau.
Je ne connais aucune fonction de bibliothèque pour le faire.