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 に答える