Ruby on rails 将二维数组复制到Ruby中的另一个数组
我在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
@mastertest = connection.execute("select code_ver from mastertest")
现在我想复制这个二维数组,因为如果我做一些类似于@temp=@mastertest
,当我对@temp
进行任何更改时,它会对@mastertest
进行更改
我尝试使用以下方法:
@temp = Marshal.load(Marshal.dump(@mastertest))
但这给了我一个错误,即“没有为类Mysql2::Result定义封送转储”
。因此,我假设@mastertest
不是二维数组,而是其他类型
有人能帮我复制这个阵列吗?这里有两种方法:(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]) }