2016-03-16 133 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