2017-07-19 93 views
-1

編輯兩個紅寶石:NoMethodError:未定義的方法`[]」爲#<枚舉:0x007f8683922870>

我注意到,在運行程序時,它也返回nil作爲在陣列中的最後一項。爲了解決這個問題我改變了我的狀

if array_list.empty? ----> if array_list.length == 1 

這將返回數組沒有nil

編輯 感謝@mudasobwa對他的幫助。

他指出,有兩件事情錯了我的程序:一個與我怎麼寫array.index使用[]而不是要求的()

也知道我不應該把方法名之間的間隔和其參數。

更新後的代碼在這裏,看看原來看看它是如何改變的。

list_one = ["apple", "anna", "banana", "peach", "cherry", "kiwi", "pineapple"] 

def sort_array(array_list, sorted_array=[]) 

    sorted_array.push(array_list.min) 
    if array_list.empty? || array_list.nil? 
    return sorted_array 
    else 
    array_list.delete_at(array_list.index(array_list.min)) 
    return sort_array(array_list, sorted_array) 
end 

end 

sort_array(list_one) 

如果有人有其他改進或建議,請讓我知道。實際上,這個遞歸函數似乎完美地工作,儘管在將來如何實現遞歸函數還有很多東西需要學習。可能很難讓我的大腦纏繞它。

編輯完,原低於

我讀通過克里斯·派恩的書學習計劃,並演習之一就是讓一個遞歸排序方法,通過項目的列表進行排序。

這裏是我的代碼:

list_one = ["apple", "anna", "banana", "peach", "cherry", "kiwi", "pineapple"] 

def sort_array (array_list, sorted_array=[]) 
    sorted_array = sorted_array 
    sorted_array.push(array_list.index[array_list.min]) 
    if array_list.empty? 
    return sorted_array 
    else 
    array_list.delete_at(array_list.index[array_list.min]) 
    return sort_array(array_list, sorted_array) 
end 

end 

sort_array (list_one) 

現在,克里斯的書使用的包裝功能,這點我嘗試引入呼叫,但它不會使在這種情況下任何區別。剛剛提出這個問題有點令人頭疼,我需要閱讀更多關於遞歸函數才能達到這一點。

運行此時,我得到標題中列出的錯誤。我還沒有找到任何運氣,所以我希望這裏有人能夠說明我可能做錯了什麼。

如果我納入克里斯的包裝函數:

def sortme (some_array) 
    sort_array(some_array, []) 
end 

誤差保持不變,這是有道理的考慮,該包裝函數只是調用sort_array功能。在這種情況下,我真的沒有看到它的需要。

有什麼想法?爲什麼我得到這個錯誤?

+0

使用'Array.sort'方法對數組進行排序......就你的情況而言'list_one.sort' –

+0

@DarshanPatel從頭開始使用'Array.sort',而不是實現一個算法,你自己賦予一個天生的複製粘貼從堆棧溢出而不是優秀的開發人員。 – mudasobwa

回答

1

的問題是在這裏:

sorted_array.push(array_list.index[array_list.min]) 

要麼使用Array#indexArray#[]

sorted_array.push(array_list.index(array_list.min)) 
# or sorted_array.push(array_list[array_list.min]) 

有兩個(或更多)毛刺與此代碼:

sorted_array = sorted_array 

是一個noop。你想用這個完成什麼?

而且,一般而言,從未有過在方法名和左括號之間放一個空格,從它的參數列表開始。在某些情況下,它可能無法按預期工作。

+0

感謝隊友。我忽略了我如何編寫array.index函數,並將其更改爲正確的格式,修復了我的程序。 我還更新了我提出的改進方案(主要是我的造型)。我對Ruby還是一個新手,我也想通過使用JavaScript來設計風格 – Nathan

相關問題