我在 Ruby 中有一个二维数组,想要制作一个可以正常工作的副本。显然我不能这样做;
array=[[3,4],[5,9],[10,2],[11,3]]
temp_array=array
因为我只是复制了对象标识符,所以我对temp_array所做的任何修改也会对array产生影响。我原本认为可以通过简单地使用以下代码来避免这个问题:
temp_array=array.dup
但是这并不起作用,因为temp_array只是一个对象标识符数组,会被复制,所以我最终仍然修改了初始数组(如果我理解我所做的错误)。我找到的解决方法如下:
temp_array=[]
array.each{|sub| temp_array << sub.dup}
这样做可以达到我想要的效果,但似乎是解决我的问题的一种笨拙方式。
如果我不知道数组将包含什么(例如,如果数组的某些部分可能是三维的),我会担心它如何工作。我潜在地需要测试数组中每个成员的类别,以查看是否必须迭代它以复制它。这并不是完全不可能的任务,但对我来说似乎有点杂乱无章。这是 Ruby 缺乏内置多维数组支持的简单后果,还是我错过了一个简单的内置函数来执行此操作?