Ruby on rails Ruby:如何在新数组中复制多维数组?

Ruby on rails Ruby:如何在新数组中复制多维数组?,ruby-on-rails,arrays,ruby,multidimensional-array,Ruby On Rails,Arrays,Ruby,Multidimensional Array,座位安排 [ [:第一,:第二,:无], [:第一,:无,:第二], [:第二,:第二,:第一], ] 我需要将此数组复制到新数组中。我尝试通过以下代码来实现: class Simulator @@current_state def initialize(seating_arrangement) @@current_state = seating_arrangement.dup end 但每当我对座位安排进行任何更改时当前状态都会自动更改。我想单独保持当前状态。我是ruby的新手。请在

座位安排
[
[:第一,:第二,:无],
[:第一,:无,:第二],
[:第二,:第二,:第一],
]

我需要将此数组复制到新数组中。我尝试通过以下代码来实现:

class Simulator
 @@current_state

def initialize(seating_arrangement)
  @@current_state = seating_arrangement.dup
end

但每当我对
座位安排进行任何更改时
当前状态
都会自动更改。我想单独保持
当前状态。我是ruby的新手。请在此帮助我

dup
不会创建深度副本,它只复制最外层的对象。从这些文件中:

def initialize(seating_arrangement)
  @@current_state = seating_arrangement.map(&:dup)
end
生成obj的浅层副本将复制obj的实例变量,但不会复制它们引用的对象。dup复制obj的污染状态

如果不确定对象的嵌套深度,则创建深度副本的最简单方法可能是序列化和反序列化对象:

@@current_state = Marshal.load(Marshal.dump(seating_arrangement))

如果您使用Rails 4.x或更高版本,只需使用:

 array.deep_dup

并使用实例变量
@current_state
而不是类变量
@@current_state
@sawa是最好的^。^@sawa感谢您的回答,但我在以下代码中遇到了一个异常:
prev_state=@@current_state.map(&:dup)
即意外&(SyntaxError)prev_state是MethodCare中的另一个局部变量。。。此解决方案仅限于二维数组,该数组仅包含响应
#dup
的对象。。。i、 e.将符号混合到数组中会引发异常并产生第三维度,甚至第二维度中的字符串也会创建浅层副本(
[[“这不会被复制”],:引发异常]
)。