反转列表。附加到 Ruby 中的列表的问题
Posted
技术标签:
【中文标题】反转列表。附加到 Ruby 中的列表的问题【英文标题】:Reversing a list. Problem with appending to lists in Ruby 【发布时间】:2022-01-21 04:43:35 【问题描述】:所以,我一直在尝试反转 Ruby 中的列表。
代码如下:
def reverse(arr)
retval = []
arr.each do |e|
retval = [e] << retval[0..retval.length]
end
return retval
end
arr = [1, 2, 3, 4, 5]
res = reverse(arr)
puts "[" + res * ", " + "]"
预期的输出是:
[5, 4, 3, 2, 1]
结果:
[5, 4, 3, 2, 1, ]
我相信[e] << retval[0..retval.length]
在这里没有正确附加。例如,我认为不是[1] << [] = [1]
,而是[1] << [] = [1, []]
。
知道如何解决这个问题吗?
注意:请不要建议任何其他方式来反转列表。谢谢你:)
【问题讨论】:
尝试p res
打印结果。
什么是压力? @Stefan
问题是我的结果数组是这样的:[5, [4, [3, [2, [1, [] ] ] ] ] ]。我打算得到 [5, 4, 3, 2, 1],如果逆向逻辑是正确的,我就会得到那个答案。
为什么不直接使用内置方法Array#reverse
?要输出结果,您可以使用Kernel#p
。这意味着 p arr.reverse
是您的代码的 Ruby 等价物。
@Sakhund "What is pres?" - 它打印res
,但(与puts
相反)将使用对象的inspect
方法,通常会显示对象的结构。
【参考方案1】:
没关系,我找到了解决方案。它有一个简单而重要的错误。我写了+
连接运算符而不是<<
并修复了它。完整代码如下:
def reverse(arr)
retval = []
arr.each do |e|
retval = [e] + retval[0..retval.length]
end
return retval
end
arr = [1, 2, 3, 4, 5]
res = reverse(arr)
puts "[" + res * ", " + "]"
【讨论】:
retval[0..retval.length]
只是retval
以上是关于反转列表。附加到 Ruby 中的列表的问题的主要内容,如果未能解决你的问题,请参考以下文章