如何在ruby中运行each_index直到最后一个元素?

时间:2015-10-16 15:13:49

标签: arrays ruby iterator each

我正在尝试在ruby中实现冒泡排序。对于迭代,我使用each_index作为输入数组。我在最后一个索引处得到一个错误,因为i + 1索引元素是nil,而ruby给出了将它与Fixnum进行比较的异常。有办法解决吗?我可以以某种方式停止第二个元素的each_index吗?

def bubble_sort(array)
    flag = false
    while flag == false
        array.each_index do |i|
            if array[i] > array[i+1]
                array[i], array[i+1] = array[i+1], array[i]
                flag = false
            else
                flag = true
            end
        end
    end
    puts array
end

bubble_sort([2,5,3,8,5,6,10])

1 个答案:

答案 0 :(得分:1)

查看each_cons

def bubble_sort(array)
    flag = false
    while flag == false
        array.each_index.each_cons(2) do |i,j|
          if array[i] > array[j]
            array[i], array[j] = array[j], array[i]
            flag = false
        else
            flag = true
        end
        #etc