2016-03-16 85 views
-1

我试图将字符串转换为数组,然后使用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

的[逆向Ruby中的字符串]可能的复制(http://stackoverflow.com/questions/3057967/reverse- a-string-in-ruby) –

+0

问题在于'reverse_array << letter [i]'这一行。变量字母包含单个字母,而不是数组,因此只需删除'[i]'。 – neuronaut

+1

摆脱'[i]':摆脱4,7和8行。 – steenslag

回答

1

您的string"book"。所以,array = string.split("")["b", "o", "o", "k"]。然后你重复i,从非0开始,递减到0。由于元素字符串全部长度为1,因此当i0时,letter[i]将返回字符串本身,否则为nil。这让你reverse_array[nil, nil, nil, "k"]

一个修复程序将被替换:

reverse_array << letter[i] 

与:

reverse_array << letter