【发布时间】:2011-01-03 14:23:08
【问题描述】:
我在 Ruby 中有一个二维数组,我想生成一个有效的副本。显然我不能这样做;
array=[[3,4],[5,9],[10,2],[11,3]]
temp_array=array
因为我对 temp_array 所做的任何修改也会对数组进行,因为我只是复制了对象标识符。我以为我可以通过简单地使用来解决这个问题;
temp_array=array.dup
但这不起作用,因为 temp_array 只是一个重复的对象标识符数组,所以我最终还是要修改初始数组(如果我明白我这样做时出了什么问题)。我找到的解决方案是执行以下操作;
temp_array=[]
array.each{|sub| temp_array << sub.dup}
这实现了我想要的,但似乎是解决我的问题的尴尬方式。
如果我不知道我的数组将包含什么(例如,如果数组的某些部分可能具有 3 维),我担心这将如何工作。我可能必须测试数组中每个成员的类,看看是否必须对其进行迭代才能复制它。根本不是不可能完成的任务,但对我来说似乎很混乱。这仅仅是 Ruby 缺乏对多维数组的内置支持的结果,还是我错过了一个简单的内置函数来做到这一点?
【问题讨论】:
标签: ruby arrays multidimensional-array