我正在尝试将字符串转换为数组,然后使用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
修复代码?
答案 0 :(得分:1)
您的string
是"book"
。因此,array = string.split("")
是["b", "o", "o", "k"]
。然后,您使用i
进行迭代,从非0
开始,递减到0
。由于元素字符串的长度均为1
,letter[i]
将在i
为0
时返回字符串,否则为nil
。这使您reverse_array
成为[nil, nil, nil, "k"]
。
修复将取代:
reverse_array << letter[i]
使用:
reverse_array << letter