首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将二维数组复制到Ruby中的另一个数组

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

Stack Overflow用户
提问于 2012-10-17 17:20:01
回答 3查看 1K关注 0票数 0

我在Ruby中有这样一条语句:

代码语言:javascript
运行
复制
@mastertest = connection.execute("select code_ver from mastertest")

所以现在我想复制这个二维数组,因为如果我执行类似@temp = @mastertest的操作,当我对@mastertest进行任何更改时,它就会对@temp进行更改。

我尝试使用以下代码:

代码语言:javascript
运行
复制
@temp = Marshal.load(Marshal.dump(@mastertest))

但这给了我一个错误,即"no marshal_dump is defined for class Mysql2::Result"。因此,我假设@mastertest不是二维数组,而是其他类型。

有人能帮我制作这个数组的副本吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-20 02:16:05

我设法解决了这个问题,使用了以下方法:

代码语言:javascript
运行
复制
@new_array = Array.new
@mastertest.each { |r| @new_array.push(r[0]) }
票数 0
EN

Stack Overflow用户

发布于 2012-10-17 17:42:31

这里有两种工作方式:(dup或clone不是完全的深度拷贝,只有Marshal才是)。

  1. 使用Object#dup或克隆。试试@temp = @mastertest.dup。我不知道Mysql2::Result的格式,所以当它像一个"2-D数组“时,这种方法可能会失败,你必须对Enumerable-mixed类中的每个元素进行重复操作。dup方法只为该类调用initialize_copy。如果在一个类似数组的对象中有任何不是POD(普通旧数据)的东西,它只会为它做一个浅拷贝。
  2. 使用两个方法为Mysql2::Result编写猴子补丁:marshal_dumpmarshal_load。这将使其响应Marshal.dump。请参阅文档about Marshal here.
票数 1
EN

Stack Overflow用户

发布于 2012-10-17 17:50:50

试一试

代码语言:javascript
运行
复制
@temp = @mastertest.clone

现在,对@temp的更改将不会影响@mastertest测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12931025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档