Ruby,bubble_sort_by(arr),代码工作但返回原始数组

时间:2017-01-24 08:22:37

标签: arrays ruby loops yield bubble-sort

简短的问题:
为什么我的方法(接受块)返回原始数组而不是修改。

长问题:
像这样的代码:

outer

在irb中,我看到inner2.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

我之前写过类似的方法<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> (没有块),代码非常相似,原来的数组被替换为交换值。
我不明白为什么交换的值不会保存在这里提到的方法中,而是我收到原始数组。

2 个答案:

答案 0 :(得分:2)

您只需交换局部变量

outer, inner = inner, outer

这不会修改array,更改必须使用的数组[]=

array[n] = value

答案 1 :(得分:2)

您需要更改数组项的值。这是工作代码:

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

          # change value array item
          array[inner_index] = inner
          array[outer_index] = outer
        end
      end
    end
  end
end