Ruby on rails 将二维数组复制到Ruby中的另一个数组

Ruby on rails 将二维数组复制到Ruby中的另一个数组,ruby-on-rails,ruby,arrays,ruby-on-rails-3,multidimensional-array,Ruby On Rails,Ruby,Arrays,Ruby On Rails 3,Multidimensional Array,我在Ruby中有这样一句话: @mastertest = connection.execute("select code_ver from mastertest") 现在我想复制这个二维数组,因为如果我做一些类似于@temp=@mastertest,当我对@temp进行任何更改时,它会对@mastertest进行更改 我尝试使用以下方法: @temp = Marshal.load(Marshal.dump(@mastertest)) 但这给了我一个错误,即“没有为类Mysql2::Resul

我在Ruby中有这样一句话:

@mastertest = connection.execute("select code_ver from mastertest")
现在我想复制这个二维数组,因为如果我做一些类似于
@temp=@mastertest
,当我对
@temp
进行任何更改时,它会对
@mastertest
进行更改

我尝试使用以下方法:

@temp = Marshal.load(Marshal.dump(@mastertest))
但这给了我一个错误,即
“没有为类Mysql2::Result定义封送转储”
。因此,我假设
@mastertest
不是二维数组,而是其他类型


有人能帮我复制这个阵列吗?

这里有两种方法:(dup或克隆不是完全深度复制,只有封送处理)

  • 使用对象#dup或克隆。试试
    @temp=@mastertest.dup
    。我不知道Mysql2::Result的格式,所以当它像一个“2-D数组”时,这种方法可能会失败,您必须复制可枚举混合类中的每个元素。
    dup
    方法只调用该类的
    initialize\u copy
    。如果在类似数组的对象中没有POD(普通的旧数据),它只会为它创建一个浅拷贝

  • 使用两种方法为
    Mysql2::Result
    编写猴补丁:
    marshal\u dump
    marshal\u load
    。这将使其响应
    封送.dump
    。看医生

  • 试一试


    现在对@temp的更改不会影响@mastertest

    我通过以下方法解决了这个问题:

    @new_array = Array.new
    @mastertest.each { |r| @new_array.push(r[0]) }
    

    这对二维阵列之类的东西不起作用。例如,
    a=[[1,2]]b=a.dup a[0]
    
    @new_array = Array.new
    @mastertest.each { |r| @new_array.push(r[0]) }