Подтвердить что ты не робот

Как сгладить 2D-массив до массива 1D?

Как я могу сгладить массив размеров 2 int originalArray[][] до 1 размерного массива?

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

Ответ 1

Простой цикл цикла сделает это, это не сложно, но будет зависеть от порядка, который вы собираетесь копировать. Например (на основании того, что в вашем примере все массивы имеют одинаковую длину):

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

или (разный порядок, 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);

Ответ 2

С Guava вы можете использовать

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

или

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

Ответ 3

С Java 8 вы можете "flatMap" внутренние массивы:

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

или

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

Ответ 4

Будет выполнено 2 шага:

1) узнать общее количество элементов для создания нового вектора (массив 1d)

2) итерации через ваш 2d-массив в предопределенном порядке и скопировать его элементы в созданный вектор

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

Ответ 5

Так как массивы не могут быть расширены (т.е. вы должны объявить размер ошибки при инициализации), вам нужно дважды пересечь массивы:

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

Ответ 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++;
          } 

Ответ 7

Подсчитайте общее количество элементов в исходном массиве. Создайте новый массив этой длины. Скопируйте элементы один за другим в новый массив.

Я не знаком с какой-либо библиотечной функцией.