如何复制嵌套数组并确保副本是原始数组的完整副本

发布于 2024-10-21 18:18:13 字数 638 浏览 6 评论 0原文

有没有一种简单的方法来复制嵌套数组,以便数组中的每个对象都将是原始对象的“重复”?我最近遇到了这个问题:

irb(main):001:0> a = [[1,2],[3,4]]
=> [[1, 2], [3, 4]]
irb(main):002:0> b = a.dup
=> [[1, 2], [3, 4]]
irb(main):003:0> a[0][1] = 99
=> 99
irb(main):004:0> a
=> [[1, 99], [3, 4]]
irb(main):005:0> b
=> [[1, 99], [3, 4]]
irb(main):006:0> a[0] = [101,102]
=> [101, 102]
irb(main):007:0> a
=> [[101, 102], [3, 4]]
irb(main):008:0> b
=> [[1, 99], [3, 4]]

因此,虽然 a 中的第一级数组是单独的对象,但它们的内容不是,a[0][1] 仍然等于 <代码>b[0][1]。通用解决方案甚至不必知道数组嵌套的深度。对我来说,遍历每个对象并使其成为其自身的副本听起来有点蛮力。

Is there an easy way to copy a nested Array so that every object in the array will be a 'dup' of the original? I recently run into this:

irb(main):001:0> a = [[1,2],[3,4]]
=> [[1, 2], [3, 4]]
irb(main):002:0> b = a.dup
=> [[1, 2], [3, 4]]
irb(main):003:0> a[0][1] = 99
=> 99
irb(main):004:0> a
=> [[1, 99], [3, 4]]
irb(main):005:0> b
=> [[1, 99], [3, 4]]
irb(main):006:0> a[0] = [101,102]
=> [101, 102]
irb(main):007:0> a
=> [[101, 102], [3, 4]]
irb(main):008:0> b
=> [[1, 99], [3, 4]]

So while the first level of arrays in a were individual objects, their content were not, a[0][1] is still equal to b[0][1]. A general solution don't even have to know how deeply an array is nested. Walking through every object and make it a dup of itself sounds a bit brute-force to me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨洒年华 2024-10-28 18:18:13
b = Marshal.load(Marshal.dump(a))
b = Marshal.load(Marshal.dump(a))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文