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関数を呼び出していることを考えると理にかなっている、同じまま。この場合、私は本当に必要性を感じません。
どのような考えですか?なぜこのエラーが発生するのですか?
Arrayをソートするための 'Array.sort'メソッドを使用します...あなたのケースでは' list_one.sort' –
@DarshanPatelアルゴリズムを実装する代わりにスクラッチからArray.sortを使用します。良い開発者ではなく、-from-stack-overflowです。 – mudasobwa