Làm cách nào để tạo bản sao sâu của một mảng 2D trong Scala?Bản sao sâu của mảng 2D trong Scala?
Ví dụ
val a = Array[Array[Int]](2,3)
a(1,0) = 12
Tôi muốn val b để sao chép giá trị của một nhưng không trỏ đến cùng một mảng.
Làm cách nào để tạo bản sao sâu của một mảng 2D trong Scala?Bản sao sâu của mảng 2D trong Scala?
Ví dụ
val a = Array[Array[Int]](2,3)
a(1,0) = 12
Tôi muốn val b để sao chép giá trị của một nhưng không trỏ đến cùng một mảng.
Given:
val a = Array[Array[Int]]
bạn có thể thử:
for(inner <- a) yield {
for (elem <- inner) yield {
elem
}
}
Một câu hỏi sâu hơn là tại sao bạn muốn làm làm như vậy với ints? Toàn bộ điểm sử dụng các loại bất biến là tránh chính xác loại cấu trúc này.
Nếu bạn có số Array[Array[T]]
chung hơn thì mối quan tâm chính của bạn là cách sao chép bản sao của T
, chứ không phải cách sao chép mảng.
Mảng trong Scala là các mảng Java và do đó có thể thay đổi. –
Bạn có thể sử dụng phương thức clone
của lớp Array
. Đối với một chiều rộng Array
, hãy sử dụng map
trên các thứ nguyên bổ sung. Ví dụ, bạn có được
val b = a.map(_.clone)
Chỉ transpose nó hai lần
a.transpose.transpose
Rất nặng, nhưng rất tuyệt :) –
Đây không phải là mã hợp lệ trong ví dụ của bạn. Bạn có thể định dạng lại không? –
Thảo luận về một chủ đề tương tự có thể được tìm thấy tại: –