【问题标题】:Reversing a list. Problem with appending to lists in Ruby反转列表。附加到 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方法,通常会显示对象的结构。

标签: ruby list append slice


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2020-07-26
  • 2017-09-19
  • 2021-11-29
  • 1970-01-01
  • 2021-07-12
  • 2013-01-28
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多