/ / Jak spłaszczyć tablicę 2D do tablicy 1D? - Java, tablice

Jak spłaszczyć tablicę 2D do tablicy 1D? - Java, tablice

Jak mogę spłaszczyć tablicę 2 wymiarów int originalArray[][] do 1 tablicy wymiarów?

    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};

Odpowiedzi:

6 dla odpowiedzi № 1

Zrobić to będzie prosta pętla, nie jest to trudne, ale będzie zależeć od kolejności, w której chcesz skopiować wartości. Na przykład (w oparciu o fakt, że w twoim przykładzie wszystkie tablice mają tę samą długość):

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];
}

lub (inna kolejność, a, b, c może być różnej długości):

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);

39 dla odpowiedzi nr 2

Z Guavamożesz użyć albo

int[] all = Ints.concat(originalArray);

lub

int[] all = Ints.concat(a, b, c);


23 dla odpowiedzi nr 3

Dzięki Java 8 możesz "flatMap" wewnętrzną tablicę:

int[] flatArray = Arrays.stream(originalArray)
.flatMapToInt(Arrays::stream)
.toArray();

lub:

int[] flatArray = Stream.of(a, b, c)
.flatMapToInt(Arrays::stream)
.toArray();

4 dla odpowiedzi № 4

Będą 2 kroki:

1) znaleźć całkowitą liczbę elementów do stworzenia nowego wektora (tablica 1d)

2) iteruj przez tablicę 2d we wcześniej zdefiniowanej kolejności i kopiuj jej elementy do utworzonego wektora

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;
}

2 dla odpowiedzi № 5

Ponieważ tablic nie można rozszerzyć (tzn. Musisz zadeklarować rozmiar błędu podczas inicjalizacji), musisz przemieścić tablice dwa razy:

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;
}

2 dla odpowiedzi № 6
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++;
}

-1 dla odpowiedzi № 7

Policz całkowitą liczbę elementów w originalArray. Utwórz nową tablicę o tej długości. Skopiuj elementy jeden po drugim do nowej tablicy.

Nie jestem zaznajomiony z żadną funkcją biblioteczną, aby to zrobić.