編輯兩個紅寶石: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功能。在這種情況下,我真的沒有看到它的需要。
有什麼想法?爲什麼我得到這個錯誤?
使用'Array.sort'方法對數組進行排序......就你的情況而言'list_one.sort' –
@DarshanPatel從頭開始使用'Array.sort',而不是實現一個算法,你自己賦予一個天生的複製粘貼從堆棧溢出而不是優秀的開發人員。 – mudasobwa