2010-04-02 22 views

cevap

6

Basit bir döngü için yapacağız, bu zor değil, ancak değerleri kopyalamak için kullanacağınız seye bağlı olacaktır.

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

veya (başka bir düzen, a, b, c, farklı uzunluklarda olabilir):

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

Örnek diziler aynı uzunlukta değil. a.length == 5, b.length == 4, c.length == 4. – phihag

+1

Ayrıca, bu iki örnekte, son düzleştirilmiş dizi için farklı sıralamalarla sonuçlandığından bahsetmeye de gerek olabilir.İlk örnekte diziler 'dokunmuş', ikincisinde ise 'uçtan uca' yerleştirilirlerse, bu –

+1

@ Kevin anlamında mantıklıysa, bence bahsettim: 'farklı düzen, a, b , c farklı uzunluklarda olabilir ' – rsp

-1

ÖzgünArray'daki toplam öğe sayısını sayın. Bu uzunlukta yeni dizi oluştur. Öğeleri tek tek yeni diziye kopyalayın.

Bunu yapmak için herhangi bir kitaplık işlevine aşina değilim.

4

2 adım olacaktır:

1) Yeni bir vektör yaratmak için eleman sayısını (1d dizi)

2) önceden tanımlanmış sırayla 2d dizi yineleme ve onun unsurları kopyalamak öğrenmek oluşturulan vektör

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

diziler uzatılamaz yana (yani başlatma üzerine bir hata boyutunu beyan etmek zorunda), iki kez diziler çapraz zorunda:

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

Vay be, ben oldukça şaşırttı özyineleme gerekli değildir değilim. – dclowd9901

+0

Bu çözümü test eden var mı? –

+0

döngü kullanmak mümkün değil mi? – Jessy

38
Örneğin (sizin örnekte diziler aynı uzunluğa sahip olduğu gerçeğine bağlı olarak) Guava ile

, aşağıdaki yöntemlerden birini kullanabilirsiniz

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

veya

Java 8 yapabilirsiniz "flatMap" ile int[] all = Ints.concat(a, b, c);

+11

Downvoted neden? Bunu yapmak için gereken tüm kodları kim yazmak ister? –

+0

Nesneler dizisi için aynısını yapmak için herhangi bir yöntem var mı? – gvlasov

+3

'ObjectArrays.concat' –

2
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++; 
      } 
23

iç diziler:

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

ya:

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