反转列表。附加到 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] &lt;&lt; retval[0..retval.length] 在这里没有正确附加。例如,我认为不是[1] &lt;&lt; [] = [1],而是[1] &lt;&lt; [] = [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】:

没关系,我找到了解决方案。它有一个简单而重要的错误。我写了+ 连接运算符而不是&lt;&lt; 并修复了它。完整代码如下:

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 中的列表的问题的主要内容,如果未能解决你的问题,请参考以下文章

将值附加到字典中的一个列表 将值附加到字典中的所有列表

将列表附加到 R 中的列表列表

将新项目附加到列表中的列表

将列表元素附加到python中的列表列表

将项目附加到列表列表中的指定列表(Python)[重复]

将字典附加到循环中的列表