2009-12-08 15 views
6

मैं स्कैला में 2 डी सरणी की गहरी प्रति कैसे करूं?स्कैला में 2 डी सरणी की गहरी प्रतिलिपि?

उदाहरण

val a = Array[Array[Int]](2,3) 
a(1,0) = 12 

के लिए मैं वैल ख एक ही सरणी की ओर इशारा करते के बिना एक लेकिन के मूल्यों की प्रतिलिपि बनाना चाहते।

+0

स्थानांतरित यह आपके उदाहरण में मान्य कोड नहीं है मिलता है। क्या आप सुधार कर सकते हैं? –

+0

इसी तरह के विषय की चर्चा यहां मिल सकती है:

उत्तर

0

को देखते हुए:

val a = Array[Array[Int]] 

आप की कोशिश कर सकते:

for(inner <- a) yield { 
    for (elem <- inner) yield { 
    elem 
    } 
} 

एक गहरी सवाल क्यों आप ints के साथ ऐसा करना चाहती हैं? अपरिवर्तनीय प्रकारों का उपयोग करने का पूरा बिंदु इस तरह के निर्माण से बचने के लिए है।

यदि आपके पास अधिक सामान्य Array[Array[T]] है, तो आपकी मुख्य चिंता यह है कि T के उदाहरण को क्लोन करने के लिए, सरणी को गहराई से क्लोन करने का तरीका नहीं है।

+2

स्कैला में Arrays जावा सरणी हैं और इसलिए mutable। –

5

आप Array कक्षा का उपयोग कर सकते हैं। एक बहु-आयामी Array के लिए, अतिरिक्त आयामों पर map का उपयोग करें। आपके उदाहरण के लिए, आप

val b = a.map(_.clone) 
1

बस इसे दो बार

a.transpose.transpose 
+0

बहुत भारी वजन, लेकिन शांत :) –

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