簡短問題:
爲什麼我的方法(它接受塊)正在返回原始數組而不是修改。Ruby,bubble_sort_by(arr),代碼正在工作,但返回原始數組
長的問題:
這樣的代碼:
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
在IRB我看到的outer
和inner
值進行交換(排序),但返回的值仍是原來的數組。
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 >
我非常相似的代碼寫較早類似方法bubble_sort
(沒有塊)和原始陣列被交換的值替代那裏。
我不明白爲什麼交換的值沒有保存在這裏提到的方法中,而是我收到原始數組。
這個答案也解決了我的下一個問題,沒有排序數組,其中最大的元素是在第一個地方(或最短的地方)。 只用這個替換: '外部,內部=內部,外部' 用這個: 'array [outer_index],array [inner_index] = array [inner_index],array [outer_index]' 不排序數組「案例情景「。 我需要更深入地分析現在和將來發生的事情。 謝謝。 – ToTenMilan