2017-07-19 3 views
-1

EDIT TWOルビー:NoMethodError:未定義のメソッド `[]」#<列挙子:0x007f8683922870>のための

私はプログラムを実行している間、それはまた、配列内の最後の項目としてnilを返したことに気づきました。これを修正するために私は自分の状態を変えました。

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

これは彼の助けのための@mudasobwaにnil

EDIT 感謝せずに配列を返します。私は[]の代わりに使用してarray.index書いた方法で1つの必須()

はまた、私は、メソッド名の間にスペースを入れてはならないことを学んだと:

は、彼は私のプログラムで間違ってカップルの事を指摘しましたそのパラメータ。

ここで更新されたコードは、オリジナルを見てどのように変更されたかを確認します。

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) 

他に改善や提案がある場合は、教えてください。つまり、この再帰関数は完璧に機能しているようですが、将来再帰関数を実装する方法についてはまだ多くのことを学んでいます。私の脳を包み込むのは難しいかもしれません。

ENDのEDIT、

BELOW ORIGINAL私はクリス・パインの本プログラムへの学びを通して読んでいる、と演習の一つは、項目のリストをソートする再帰的なソート方法を作ることです。

は、ここに私のコードです:今

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をソートするための 'Array.sort'メソッドを使用します...あなたのケースでは' list_one.sort' –

+0

@DarshanPatelアルゴリズムを実装する代わりにスクラッチからArray.sortを使用します。良い開発者ではなく、-from-stack-overflowです。 – mudasobwa

答えて

1

問題はここにある:

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

いずれかを使用しArray#indexまたはArray#[]

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

このコードの2つ(またはそれ以上)のグリッチがあります

sorted_array = sorted_array 

はノープです。あなたはそれで何をしたいのですか?

は、メソッド名と開始括弧の間にそのパラメータのリストを開始するスペースを入れます。場合によっては期待どおりに動作しないことがあります。

+0

ありがとうございます。私はarray.index関数をどのように書いたのか見落とし、その正しいフォーマットに変更することで自分のプログラムが修正されました。 また、私のプログラムをあなたが(自分のスタイリングで)主に改善した内容で更新しました。私はまだRubyの新機能ですが、私はJavaScriptを使ってやり方を変えたいと思って間違いを犯しています – Nathan

関連する問題