2017-07-19 91 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

相关问题