Будет ли глубокое копирование достичь желаемого результата?
Я думаю, что причина того, что ваш код не работал должным образом, заключалась в том, что каждый раз, когда вы вносили изменения в обновленную таблицу, она автоматически меняла оригинал из-за того, как вы сначала скопировали (ссылались) его. *
Я не думаю, что object.dup
будет работать так, как вы хотите, потому что ваш массив является двухмерным. Смотрите здесь - http://ruby.about.com/od/advancedruby/a/deepcopy.htm - для хорошего дальнейшего чтения (с примерами на основе массива) на предмет object.dup, клонирования и сортировки, чтобы выяснить, почему.
Я просто добавил фрагмент для глубокого копирования таблицы, а не клонировал ее.
# Deep copy - http://www.ruby-forum.com/topic/121005
# Thanks to Wayne E. Seguin.
class Object
def deep_copy( object )
Marshal.load( Marshal.dump( object ) )
end
end
table = [[0,20,5,1000,1000], [20,0,10,8,20], [5,10,0,1000,40], [1000,8,1000,0,6], [1000,20,40,6,0]]
updated_table = deep_copy(table) # -- DON'T CLONE TABLE, DEEP COPY INSTEAD --
##
# then here i have some code that makes changes to the values in the updated_table
##
2.times do
updated_table = deep_copy(table) # -- USE DEEP_COPY HERE TOO --
## do some more calculations and so on ##
end