2009-12-08 19 views
6

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.

+0

Đâ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? –

+0

Thảo luận về một chủ đề tương tự có thể được tìm thấy tại:

Trả lời

0

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.

+2

Mảng trong Scala là các mảng Java và do đó có thể thay đổi. –

5

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) 
1

Chỉ transpose nó hai lần

a.transpose.transpose 
+0

Rất nặng, nhưng rất tuyệt :) –