首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bubble_sort_by(arr),代码正在工作,但返回原始数组

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

Stack Overflow用户
提问于 2017-01-24 08:22:36
回答 2查看 66关注 0票数 0

简短的问题:

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

很长的问题:

代码如下:

代码语言:javascript
复制
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中,我看到outerinner的值被交换(排序),但是返回值仍然是原始数组。

代码语言:javascript
复制
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 (没有块),原来的数组在那里被交换的值所取代。

我不明白为什么交换的值没有保存在这里提到的方法中,而是接收原始数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-24 08:35:39

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2017-01-24 08:29:32

你只交换局部变量

代码语言:javascript
复制
outer, inner = inner, outer

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

代码语言:javascript
复制
array[n] = value
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41823234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档