मैं स्कैला में 2 डी सरणी की गहरी प्रति कैसे करूं?स्कैला में 2 डी सरणी की गहरी प्रतिलिपि?
उदाहरण
val a = Array[Array[Int]](2,3)
a(1,0) = 12
के लिए मैं वैल ख एक ही सरणी की ओर इशारा करते के बिना एक लेकिन के मूल्यों की प्रतिलिपि बनाना चाहते।
मैं स्कैला में 2 डी सरणी की गहरी प्रति कैसे करूं?स्कैला में 2 डी सरणी की गहरी प्रतिलिपि?
उदाहरण
val a = Array[Array[Int]](2,3)
a(1,0) = 12
के लिए मैं वैल ख एक ही सरणी की ओर इशारा करते के बिना एक लेकिन के मूल्यों की प्रतिलिपि बनाना चाहते।
को देखते हुए:
val a = Array[Array[Int]]
आप की कोशिश कर सकते:
for(inner <- a) yield {
for (elem <- inner) yield {
elem
}
}
एक गहरी सवाल क्यों आप ints के साथ ऐसा करना चाहती हैं? अपरिवर्तनीय प्रकारों का उपयोग करने का पूरा बिंदु इस तरह के निर्माण से बचने के लिए है।
यदि आपके पास अधिक सामान्य Array[Array[T]]
है, तो आपकी मुख्य चिंता यह है कि T
के उदाहरण को क्लोन करने के लिए, सरणी को गहराई से क्लोन करने का तरीका नहीं है।
स्कैला में Arrays जावा सरणी हैं और इसलिए mutable। –
आप Array
कक्षा का उपयोग कर सकते हैं। एक बहु-आयामी Array
के लिए, अतिरिक्त आयामों पर map
का उपयोग करें। आपके उदाहरण के लिए, आप
val b = a.map(_.clone)
बस इसे दो बार
a.transpose.transpose
बहुत भारी वजन, लेकिन शांत :) –
स्थानांतरित यह आपके उदाहरण में मान्य कोड नहीं है मिलता है। क्या आप सुधार कर सकते हैं? –
इसी तरह के विषय की चर्चा यहां मिल सकती है: –