Kurze Frage:
Warum meine Methode (die Blöcke akzeptiert) gibt Original-Array anstelle von geändert.Ruby, bubble_sort_by (arr), der Code funktioniert, aber das ursprüngliche Array wird zurückgegeben
Lange Frage:
-Code wie folgt aus:
def bubble_sort_by(array)
array.each_with_index do |outer, outer_index|
array.each_with_index do |inner, inner_index|
if yield(outer, inner) > 0
if outer_index < inner_index
p "outer after if: " + outer # for debugging, indented for clarity
p "inner after if: " + inner # for debugging
outer, inner = inner, outer
p "outer after swap: " + outer # for debugging
p "inner after swap: " + inner # for debugging
end
end
end
end
end
bubble_sort_by(["hi","hello","hey"]) do |left,right|
left.length - right.length
end
In irb Ich sehe, dass die Werte von outer
und inner
vertauscht (sortiert), aber der Rückgabewert ist immer noch das Original-Array.
2.3.3 :1223 > end
"outer after if: hello"
"inner after if: hey"
"outer after swap: hey"
"inner after swap: hello"
=> ["hi", "hello", "hey"]
2.3.3 :1224 >
Ich schrieb früher ähnliche Methode bubble_sort
(ohne Block) mit sehr ähnlichem Code und die Original-Array wurde von getauscht dort Werten ersetzt.
Ich verstehe nicht, warum die vertauschten Werte nicht in der hier genannten Methode gespeichert werden, und stattdessen erhalte ich original Array.
Diese Antwort löste auch mein nächstes Problem, indem ich Array nicht sortierte, wo das größte Element an erster Stelle steht (oder am kürzesten Platz). Nur diese ersetzen: 'äußeren, innen = Innen, outer' mit diesem: ' array [outer_index], array [inner_index] = array [inner_index], array [outer_index] ' ist das Sortieren nicht in das Array„worst Fallszenario ". Ich muss tiefer analysieren, was ab und zu passiert. Danke. – ToTenMilan