-1
Ich versuche, eine Methode zu erstellen, die bubble-sort verwendet, um ein kleines Array in numerischer Reihenfolge zu sortieren. Diese Methode akzeptiert zwei Argumente, ein Array und ein Verfahren:So verwenden Sie einen Block als Methodeneingabe
def bubble_sort_by(arr)
while(true)
counter = 0
for i in 0...(arr.size-1)
if yield (arr[i], arr[i+1]) > 0
saved = arr[i]
arr[i] = arr[i+1]
arr[i+1] = saved
counter += 1
end
end
if (counter == 0)
break
end
end
print arr
end
bubble_sort_by([4,3,78,2,0,2]) do |left,right|
return left - right
end
Die sortierten Array
[0,2,2,3,4,78]
sein sollte Derzeit bin ich mit Ruby-Version 2.3.0p0.
Ich bekomme immer einen Syntaxfehler, wenn ich versuche, diesen Code auszuführen.
Bitte lesen Sie "[fragen]" einschließlich der verlinkten Seiten und "[mcve]". Wenn Sie nach einem Syntaxfehler in Ihrem Code fragen, hilft es * wirklich *, wenn Sie sagen, was es ist. Das hilft uns, dir zu helfen. –
Ich möchte ein paar Dinge über Ihren Code erwähnen, der nichts mit Ihrer Frage zu tun hat. 1. "loop do" wird dem etwas künstlichen "while (true)" vorgezogen. Zum einen behandelt [Kernel # loop] (http://ruby-doc.org/core-2.2/Kernel.html#method-i-loop) die Ausnahme 'StopInteration', eine nützliche Eigenschaft, die Sie kennenlernen werden rechtzeitig. 2. Iteratoren mit Blöcken werden den "for" -Schleifen vorgezogen (die niemand benutzt): '(arr.size-1) × {| i | ...} '. (Forts.) ... –
... 3. Ruby erlaubt Ihnen, * parallele Zuweisung * (auch bekannt als * multiple Zuweisung *) zu verwenden, um zwei Werte des Arrays ohne die Verwendung einer temporären Variable (Ihre 'gespeicherte') zu vertauschen:' arr [i], arr [i + 1] = arr [i + 1], arr [i] '. (Forts.) ... 4. Einige bevorzugen "break if counter == 0" zu Ihrem 3-Linien-Konstrukt. (Oder 'break if counter.zero? ', Um gegen die versehentliche Verwendung eines einzelnen Gleichheitszeichens zu schützen.) 5. Wenn der Hauptzweck einer Methode darin besteht, einen Wert (hier ein sortiertes Array) zu berechnen, mit einer print-Anweisung innerhalb der Methode macht die Methode weniger vielseitig. Besser, es zu verschieben und 'pubes bubble_sort_by (arr)' zu schreiben. –