gpt4 book ai didi

ruby - 复制 Ruby 字符串数组

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:18 25 4
gpt4 key购买 nike

arr = ["red","green","yellow"]

arr2 = arr.clone
arr2[0].replace("blue")

puts arr.inspect
puts arr2.inspect

产生:

["blue", "green", "yellow"]
["blue", "green", "yellow"]

除了据我所知使用 Marshal 之外,是否还有对字符串数组进行深度复制的方法。

我能做到:

arr2 = []
arr.each do |e|
arr2 << e.clone
end

但它看起来不是很优雅或高效。

谢谢

最佳答案

您的第二个解决方案可以缩短为 arr2 = arr.map do |e| e.dup end(除非你真的需要clone的行为,否则建议使用dup代替)。

除此之外,您的两个解决方案基本上是执行深复制的标准解决方案(尽管第二个版本只有一层深(即,如果您在字符串数组的数组上使用它,您仍然可以改变字符串)).确实没有更好的方法。

编辑:这是一个适用于任意嵌套数组的递归 deep_dup 方法:

class Array
def deep_dup
map {|x| x.deep_dup}
end
end

class Object
def deep_dup
dup
end
end

class Numeric
# We need this because number.dup throws an exception
# We also need the same definition for Symbol, TrueClass and FalseClass
def deep_dup
self
end
end

您可能还想为其他容器(如 Hash)定义 deep_dup,否则您仍然会得到这些容器的浅拷贝。

关于ruby - 复制 Ruby 字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com