将字符串转换为数组并将其反转

时间:2016-03-16 21:57:28

标签: ruby

我正在尝试将字符串转换为数组,然后使用Enumerable#each将其反转。在下文中,我希望得到["k","o","o","b"]

def reverse(string)
  array = string.split("")
  reverse_array = []
  i = array.length - 1
  array.each do |letter|
    reverse_array << letter[i]
    i = i - 1
    break if i == -1
  end
  p reverse_array
end

reverse("book") # => [nil, nil, nil, "k"]

有人可以解释我为什么会收到nil,以及如何使用Enumerable#each修复代码?

1 个答案:

答案 0 :(得分:1)

您的string"book"。因此,array = string.split("")["b", "o", "o", "k"]。然后,您使用i进行迭代,从非0开始,递减到0。由于元素字符串的长度均为1letter[i]将在i0时返回字符串,否则为nil。这使您reverse_array成为[nil, nil, nil, "k"]

修复将取代:

reverse_array << letter[i]

使用:

reverse_array << letter