1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Запись двумерного массива

Тема в разделе "MAXScript", создана пользователем aly8, 11 сен 2009.

Модераторы: Savin Denis
  1. aly8

    aly8 Активный участник

    С нами с:
    22.12.2005
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    10
    Есть код:

    Код:
    (
    	global a = #()
    	local b = #()
    	for i = 1 to 3 do
    	(
    		b[i] = i^2
    		append a b
    		)
    	a
    	)
    
    на выходе:
    Код:
    #(#(1, 4, 9), #(1, 4, 9), #(1, 4, 9))
    
    а надо :
    Код:
    #(#(1), #(1, 4), #(1, 4, 9))
    
    Посоветуйте пожалуйста, как этого можно добиться?

    Что самое интересное в листере все работает как хотелось бы:

    Код:
    a = #(1) -- enter
    #(1)   
    b = #(a,a) -- enter
    #(#(1), #(1))
    a = #(2) -- enter
    #(2)
    b -- enter
    #(#(1), #(1))
    
    т.е. массив b не присваивает значения измененного массива a, только если заново не задать b = #(a,a) (по сути сохраняет старое значение)
     
  2. RENDERATOR

    RENDERATOR Активный участник

    С нами с:
    27.01.2003
    Сообщения:
    83
    Симпатии:
    0
    Баллы:
    12
    В первом примере Вы в цикле добавляете к массиву a ссылку на ту же область памяти, на которую ссылается переменная b.
    В итоге при выходе из цикла массив a просто содержит три ссылки на одну и ту же область памяти.
    Вам нужно в цикле добавлять новую копию массива b. Например, с помощью метода deepCopy.

    Код:
    (
    	global a = #()
    	local b = #()
    	for i = 1 to 3 do
    	(
    		b[i] = i^2
    		append a (deepCopy b)
    	)
    	a
    ) 
    
     
  3. aly8

    aly8 Активный участник

    С нами с:
    22.12.2005
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    10
    класс! спасибо!
     
Модераторы: Savin Denis

Поделиться этой страницей