Ruby on rails 删除1后输出为[2][1,2],但输出为[2][2]
删除1后,我需要输出为Ruby on rails 删除1后输出为[2][1,2],但输出为[2][2],ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,删除1后,我需要输出为[2][1,2],但输出为[2][2]: def array_dup(n,obj) array= [] for i in 1..n print array.push(obj)[i] end return array end print (array_dup(5,'hi')) c = array_dup(5, [1,2]) puts print c c[0].delete(1) puts c print c puts 输出应该如下所示: ["hi
[2][1,2]
,但输出为[2][2]
:
def array_dup(n,obj)
array= []
for i in 1..n
print array.push(obj)[i]
end
return array
end
print (array_dup(5,'hi'))
c = array_dup(5, [1,2])
puts
print c
c[0].delete(1)
puts c
print c
puts
输出应该如下所示:
["hi", "hi", "hi", "hi", "hi"]
[[2], [1, 2], [1, 2], [1, 2], [1, 2]]
但是,它看起来像:
["hi", "hi", "hi", "hi", "hi"]
[[1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]2
2
2
2
2
[[2], [2], [2], [2], [2]]
尝试此解决方案,它可能看起来很大,但正在工作:
test_array = []
c.flatten[1..-1].each_slice(2).to_a.reverse_each {|x| test_array << x.reverse!}
puts test_array
请修复代码中的缩进。这让我很难帮助你。我只是修复了它,请检查。我修复了它,使它更可读。我理解OP的要求。。。我们可以重新打开它吗?这里有一个简短的答案,以防它没有重新打开:只需将
push(obj)
更改为push(obj.dup)
。在第一种情况下,您正在插入对同一对象的引用,而实际上您希望它们是分开的。有点讽刺的是,当dup
一直是您所需要的时,您却将该方法命名为array\u dup
!
[[2], [1, 2], [1, 2], [1, 2], [1, 2]]