编辑两个红宝石: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