Tôi có một mảng 2 chiều trong Ruby mà tôi muốn tạo một bản sao làm việc. Rõ ràng tôi không thể làm điều này;Có cách nào đơn giản để sao chép mảng đa chiều trong Ruby không?
array=[[3,4],[5,9],[10,2],[11,3]]
temp_array=array
vì bất kỳ sửa đổi nào tôi thực hiện cho temp_array cũng sẽ được tạo thành mảng, vì tôi vừa sao chép mã định danh đối tượng. Tôi nghĩ rằng tôi sẽ có thể để có được xung quanh này bằng cách sử dụng đơn giản;
temp_array=array.dup
nhưng điều này không làm việc như temp_array chỉ đơn giản là một mảng của định danh đối tượng mà có được nhân đôi vì vậy tôi vẫn kết thúc điều chỉnh các mảng ban đầu (nếu tôi hiểu những gì đã xảy ra khi tôi đã làm điều này). Giải pháp tôi tìm thấy là làm như sau;
temp_array=[]
array.each{|sub| temp_array << sub.dup}
Điều này đạt được những gì tôi muốn nhưng có vẻ là một cách giải quyết khó khăn.
Tôi lo ngại về cách thức hoạt động này nếu tôi không biết mảng của mình sẽ chứa gì (ví dụ: nếu có thể một số phần của mảng có 3 chiều). Tôi có khả năng sẽ phải kiểm tra lớp của từng thành viên của mảng để xem liệu nó có phải được lặp lại để nhân đôi nó hay không. Không phải là một nhiệm vụ bất khả thi chút nào, nhưng nó có vẻ lộn xộn với tôi. Đây có phải chỉ đơn giản là hậu quả của Ruby thiếu sự hỗ trợ tích hợp cho các mảng đa chiều hoặc có một hàm dựng sẵn đơn giản để làm điều này mà tôi đã bỏ lỡ không?
Đó là cách. Tôi thích gắn bó mã đó trong Object.deep_copy. –
Tuyệt vời, thankyou. Điều này thực sự giải thích toàn bộ điều Marshalling cho tôi (mặc dù tôi cần phải đi và làm một số đọc nhiều hơn để thực sự có được đầu của tôi xung quanh nó). – brad