0

我的编程书中有一个练习,要求我在不使用任何内置排序的情况下对 Ruby 中的字符串数组进行排序。我正确地对前 5 名进行了排序,但随后就停止了,我无法弄清楚原因。这是我到目前为止所拥有的:

numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']

def sortArray myArray
    recursiveSort myArray, []
end

def recursiveSort myArray, sortedArray
    trashArray = myArray
    myArray.each do |num|
        largest = num
        trashArray.each do |comp|
            if comp > largest
                largest = comp
            end
        end
        sortedArray.push(largest)
        trashArray.delete_at(trashArray.index(largest))
    end
    puts sortedArray
end

sortArray numbers
4

1 回答 1

3

这是正在发生的事情的一个例子。从我的终端:

$ irb
ruby-1.9.3-p125 :001 > a = [1,2]
 => [1, 2] 
ruby-1.9.3-p125 :002 > b = a
 => [1, 2] 
ruby-1.9.3-p125 :003 > b.delete_at(b.index(1))
 => 1 
ruby-1.9.3-p125 :004 > b
 => [2] 
ruby-1.9.3-p125 :005 > a
 => [2] 

您的变量trashArraymyArray是对内存中同一对象的引用,因此您正在从 myArray 中删除项目:trashArray.delete_at(trashArray.index(largest))

于 2012-09-22T00:06:03.747 回答