2011-01-15 27 views
22

क्या दो में से एक सरणी बनाने का कोई तरीका है? जैसेदो पूर्णांक सरणी एकत्र करें

int[] array1 = {1,2,3}; 
int[] array2 = {4,5,6}; 
int[] array1and2 = array1 + array2; 
+1

आप कौन सा करने की कोशिश कर रहे हैं? सरणी को जोड़ना या तत्वों को जोड़ना? – mob

उत्तर

63

आप उन्हें सीधे नहीं जोड़ सकते हैं परीक्षण नहीं किया है, तो आप एक नई सरणी बनाने के लिए और फिर नए एक में सरणियों में से प्रत्येक को कॉपी करने के लिए है। System.arraycopy एक ऐसी विधि है जिसका उपयोग आप इस प्रतिलिपि को करने के लिए कर सकते हैं।

int[] array1and2 = new int[array1.length + array2.length]; 
System.arraycopy(array1, 0, array1and2, 0, array1.length); 
System.arraycopy(array2, 0, array1and2, array1.length, array2.length); 

यह array1 और array2 के आकार के बावजूद काम करेगा।

1

हाँ, लेकिन यह इतना आसान नहीं है। एक तृतीय सरणी बनाएं जो प्रत्येक मूल सरणी के माध्यम से दो सरणी संयुक्त और लूप का आकार है और आइटम को ऊपर ले जाएं। System.arraycopy() पर भी देखें।

1

दोनों सरणी का कुल आकार खोजें और सरणी 1and2 को दोनों सरणी के कुल आकार में सेट करें। फिर लूप array1 और फिर array2 और मान 1 और 2 में मान जोड़ें।

+0

उस व्यक्ति के लिए -1 को रखने का कोई भी अच्छा कारण है? उदाहरण के लिए, विधि सुझाई गई विफल? यदि यह अलग-अलग तरीकों पर असहमति है लेकिन दोनों एक ही परिणाम उत्पन्न करते हैं, तो यह एक अच्छा कारण नहीं है। – thotheolh

1

नोट: यह

int[] concatArray(int[] a, int[] b) { 
    int[] c = new int[a.length + b.length]; 
    int i = 0; 
    for (int x : a) { c[i] = x; i ++; } 
    for (int x : b) { c[i] = x; i ++; } 
    return c; 
} 
0

मुझे लगता है कि आपको एक नई सरणी आवंटित करनी है और मानों को नई सरणी में रखना है। उदाहरण के लिए:

int[] array1and2 = new int[array1.length + array2.length]; 
int currentPosition = 0; 

for(int i = 0; i < array1.length; i++) { 
    array1and2[currentPosition] = array1[i]; 
    currentPosition++; 
} 

for(int j = 0; j < array2.length; j++) { 
    array1and2[currentPosition] = array2[j]; 
    currentPosition++; 
} 

जहां तक ​​मैं इसे देख सकता हूं, इस कोड को काम करना चाहिए।

3
int [] newArray = new int[old1.length+old2.length]; 
System.arraycopy(old1, 0, newArray, 0, old1.length); 
System.arraycopy(old2, 0, newArray, old1.length, old2.length); 

तत्व-दर-तत्व नकल का प्रयोग न करें, यह System.arraycopy()

0

टास्क की तुलना में बहुत धीमी है: यह देखते हुए दो पूर्णांक सरणियों array1 और एक ही लंबाई के array2, ज़िप एक सरणी के रूप में दो बार है कि वापस आ जाएगी लंबा, जिसमें array1 और array2 के तत्व interleaved हैं। यही है, परिणाम सरणी का तत्व # 0 array1 [0] है, तत्व # 1 array2 [0] है, तत्व # 2 सरणी 1 [1] है, तत्व # 3 सरणी 2 [1] है, और इसी तरह।

public static int [] zip(int [ ] array1, int [] array2) { 
//make sure both arrays have same length 
if (array1.length != array2.length) { 
    throw new IllegalArgumentException("Unequal array lengths - zip not possible"); 
} 

int [] zippedArray = new int [array1.length+ array2.length]; 
int idx_1 = 0; 
int idx_2 = 0; 

//for each element of first array, add to new array if index of new array is even 

for (int i=0; i < zippedArray.length; i+=2){ 
    zippedArray[i]= array1[idx_1++]; 
} 
for (int i=1; i < zippedArray.length; i+=2){ 
    zippedArray[i]= array2[idx_2++]; 
} 

//check contents of new array  
for (int item: zippedArray){ 
    System.out.print(item + " "); 
} 

return zippedArray; 

} 
6

यहाँ एक सरल कार्य है जो चर तर्क का उपयोग करें:

final static 
public int[] merge(final int[] ...arrays) { 
    int size = 0; 
    for (int[] a: arrays) 
     size += a.length; 

     int[] res = new int[size]; 

     int destPos = 0; 
     for (int i = 0; i < arrays.length; i++) { 
      if (i > 0) destPos += arrays[i-1].length; 
      int length = arrays[i].length; 
      System.arraycopy(arrays[i], 0, res, destPos, length); 
     } 

     return res; 
} 

का उपयोग करें:

int[] array1 = {1,2,3}; 
int[] array2 = {4,5,6}; 
int[] array3 = {7,8,9}; 
int[] array1and2and3 = merge(array1, array2, array3); 
for (int x: array1and2and3) 
    System.out.print(String.format("%3d", x)); 
2

उपयोग ArrayUtils.addAll (टी [], टी ...):

import org.apache.commons.lang3.ArrayUtils; 

AnyObject[] array1 = ...; 
AnyObject[] array2 = ...; 
AnyObject[] mergedArray = ArrayUtils.addAll(array1, array2); 
संबंधित मुद्दे