简短的问题:
为什么我的方法(接受块)返回原始数组而不是修改。
很长的问题:
代码如下:
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 (没有块),原来的数组在那里被交换的值所取代。
我不明白为什么交换的值没有保存在这里提到的方法中,而是接收原始数组。
发布于 2017-01-24 08:35:39
您需要更改数组项的值。这是工作代码:
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发布于 2017-01-24 08:29:32
你只交换局部变量
outer, inner = inner, outer这不会修改array,要更改必须使用[]=的数组
array[n] = valuehttps://stackoverflow.com/questions/41823234
复制相似问题