2010-04-02 22 views

उत्तर

6

लूप के लिए एक सरल होगा, यह मुश्किल नहीं है, लेकिन आप मूल्यों की प्रतिलिपि बनाने के क्रम में निर्भर करेंगे।

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

या (अलग आदेश, एक, ख, ग अलग-अलग लंबाई के हो सकते हैं):

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

उदाहरण सरणी में समान लंबाई नहीं है। ए। लम्बाई == 5, बी। लम्बाई == 4, सी। लम्बाई == 4. – phihag

+1

यह भी उल्लेखनीय हो सकता है कि अंतिम उदाहरण अंतिम फटकार सरणी के लिए अलग-अलग क्रमों के साथ समाप्त होते हैं, यदि यह महत्वपूर्ण है।पहले उदाहरण में, सरणी 'weaved' हैं, जबकि दूसरे में, उन्हें 'एंड-टू-एंड' रखा जाता है, अगर यह –

+1

@ केविन समझ में आता है, मुझे लगता है कि मैंने इसका उल्लेख किया है: 'अलग ऑर्डर, ए, बी , सी विभिन्न लंबाई ' – rsp

-1

मूल ऐरे में तत्वों की कुल संख्या की गणना करें। उस लंबाई की नई सरणी बनाएं। तत्वों को एक-एक करके नई सरणी में कॉपी करें।

मैं ऐसा करने के लिए किसी भी लाइब्रेरी फ़ंक्शन से अपरिचित हूं।

4

2 कदम होगा:

1) तत्वों की कुल संख्या एक नया वेक्टर बनाने के लिए (1 दिन सरणी)

2) पूर्वनिर्धारित क्रम में अपने 2 डी सरणी के माध्यम से पुनरावृति और करने के लिए उसके तत्वों कॉपी पता लगाना बनाया वेक्टर

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

के बाद से सरणियों नहीं बढ़ाई जा सकती (यानी आप प्रारंभ पर एक त्रुटि के आकार की घोषणा करने के हैं) तो आप सरणियों दो बार पार करने के लिए है:

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

वाह, मैं कर रहा हूँ काफी हैरान प्रत्यावर्तन आवश्यक नहीं है। – dclowd9901

+0

किसी ने इस समाधान का परीक्षण किया? –

+0

क्या लूप का उपयोग नहीं करना संभव है? – Jessy

38
उदाहरण के लिए (तथ्य यह है कि अपने उदाहरण में सरणियों सभी एक ही लंबाई के आधार पर)

Guava के साथ, आप उपयोग कर सकते हैं या तो

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

या

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

+11

डाउनवॉटेड क्यों? जब वे ऐसा करने की ज़रूरत है तो ऊपर दिए गए सभी कोड को कौन लिखना चाहता है? –

+0

क्या ऑब्जेक्ट्स की सरणी के लिए ऐसा करने का कोई तरीका है? – gvlasov

+3

'ऑब्जेक्टअरेज़.कोनकैट' –

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
जावा 8 आप कर सकते हैं "flatMap" के साथ

भीतरी सरणियों:

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

या:

int[] flatArray = Stream.of(a, b, c) 
     .flatMapToInt(Arrays::stream) 
     .toArray(); 
संबंधित मुद्दे