2011-04-06 11 views
6

यह इस तरह के समुदाय में मेरा पहला प्रश्न है, इसलिए प्रश्न में मेरा प्रारूप पहले स्थान पर बहुत अच्छा नहीं हो सकता है।2 आयामी सरणी (विभिन्न पंक्ति आकार) की गहरी प्रतिलिपि कैसे करें

अब मेरी समस्या यह है कि मैं जावा में 2 आयाम सरणी गहरी प्रतिलिपि बनाना चाहता हूं। पंक्तियों और स्तंभों के निश्चित आकार के साथ 1 आयाम या यहां तक ​​कि 2 आयाम सरणी में यह बहुत आसान है।

int[][] copyArray = new int[row][column] 

क्योंकि पंक्ति आकार तय नहीं किया गया है और इस तरह मैं के रूप में प्रत्येक पंक्ति सूचकांक में परिवर्तन इस सरणी नकल करने की कोशिश:: मेरी मुख्य समस्या यह मुझे लगता है मैं कॉपी करने के लिए इस तरह के रूप कोशिश दूसरी सरणी के लिए एक प्रारंभ नहीं कर सकता है

int[][] envoriment = {{1, 1, 1, 1}, {0, 1, 6}, {1}}; 

तो आप देखते हैं, अगर मैं कहता हूं, new int[3][4] अतिरिक्त रिक्त स्थान होंगे जो मैं नहीं चाहता हूं। क्या इस प्रकार की 2 आयामी सरणी की गहरी प्रतिलिपि बनाने का कोई तरीका है?

उत्तर

11

मुझे लगता है कि तुम क्या मतलब है कि स्तंभ आकार तय नहीं है। वैसे भी एक सरल सीधा तरीका होगा:

public int[][] copy(int[][] input) { 
     int[][] target = new int[input.length][]; 
     for (int i=0; i <input.length; i++) { 
     target[i] = Arrays.copyOf(input[i], input[i].length); 
     } 
     return target; 
} 
+0

अच्छा सामान्य समाधान –

+0

बहुत बढ़िया है, यही वह है जो मैं सामान्य रूप से खोजता हूं। उन सभी उत्तरों के लिए धन्यवाद जिन्होंने सभी ने मेरी मदद की :) – Dagohan

3

आप एक ही समय में दोनों आयाम प्रारंभ करने की जरूरत नहीं है:

int[][] test = new int[100][]; 
test[0] = new int[50]; 

यह मदद करता है?

+0

ओह यह जानकारी मदद करेगी। मैंने कभी भी अलग-अलग समय में आयामों को शुरू करने के बारे में सोचा नहीं – Dagohan

-1

आप कुछ इस तरह की जरूरत हो सकती:

public class Example { 
    public static void main(String[] args) { 

    int[][] envoriment = {{1, 1, 1, 1}, {0, 1, 6}, {1}}; 

    int[][] copyArray = new int[envoriment.length][]; 
    System.arraycopy(envoriment, 0, copyArray, 0, envoriment.length); 
    } 
} 
+1

यह एक उथली प्रति है। – rlibby

+1

जो कोड आप प्रस्तावित कर रहे हैं वह उथ-प्रतिलिपि है, है ना? एरेकॉपी पर्यावरण सरणी के प्रत्येक मान को नए में कॉपी करेगा। यह है: यह मूल पंक्तियों के संदर्भों की प्रतिलिपि बनायेगा। यह उप-सरणी की प्रतिलिपि नहीं जा रहा है। – helios

+0

@rlibby और @ हेलीओस, क्या आप वाकई उथले प्रतिलिपि करते हैं? मैंने सोचा कि एक गहरी प्रति है। उस मामले में मुझे फिर से जाना चाहिए। मैं गलत हो सकता हूं। इस पर ध्यान दिलाने के लिए धन्यवाद। – Shankar

1

जावा 8 lambdas इसे आसान बनाने के:

int[][] copy = Arrays.stream(envoriment).map(x -> x.clone()).toArray(int[][]::new); 

आप भी लिख सकते हैं .map(int[]::clone)JDK-8056051 के बाद तय हो गई है अगर आपको लगता है कि स्पष्ट है।

संबंधित मुद्दे