PDA

Просмотр полной версии : как получить новый массов?


nuran
24.11.2004, 17:11
Как скопировать массив, не ссылку а массив, т.е.

someArray = someArray2
даст в someArray лишь ссылку на someArray, а как именно скопировать someArray2, чтобы в someArray оказалась его копия?

netCat
24.11.2004, 17:16
через цикл push'ить элементы первого массива во второй

Nox Noctis
24.11.2004, 17:20
a = [0,0,0];
b = a.concat();
b[0] = 9;
a[0] = 999;
trace(a);
trace(b);

DeliMIter
24.11.2004, 17:28
Нуран, да ты никак флэш решил изучить : ))))) ?

nuran
24.11.2004, 17:37
Оригинал написал(а) Nox Noctis
a = [0,0,0];
b = a.concat();
b[0] = 9;
a[0] = 999;
trace(a);
trace(b);


окей, а как сравнивать массивы, не уж то каждый элемент? :confused:
может что нибудь интересней есть?

a = [9,0,0];
b = a.concat();
trace(a);
trace(b);
trace(a == b);

Nox Noctis
24.11.2004, 18:10
Оригинал написал(а) nuran
окей, а как сравнивать массивы, не уж то каждый элемент? :confused:
может что нибудь интересней есть?
нуран, ты меня убиваешь... как ты писал свои движки, не пользуясь такими вещами? :)

сравнить одномерные массивы, в которых лежат простые типы данных, можно просто преобразовав изх в строку.

а вот если в массиве встречаются объекты - тогда придется перебирать... или еще как-нибудь извращаться.

a = [9, 0, 0, "nuran", "in da actionscript"];
b = a.concat();
trace(a);
trace(b);
trace(a.join(chr(31)) == b.join(chr(31)));chr(31) взято просто на случай если в массивах лежат строки. символ chr(31) как правило в строках не встречается :) поэтому можно его взять в качестве разделителя. (а можно при необходимости другой символ)

Штрек
24.11.2004, 18:16
Оригинал написал(а) DeliMIter
Нуран, да ты никак флэш решил изучить : ))))) ?
Надо помочь человеку,
он легко ранимый...
или раненый.... :p

Штрек
24.11.2004, 18:19
А что
a.slice(0)
не катит?

nuran
24.11.2004, 18:21
Оригинал написал(а) DeliMIter
Нуран, да ты никак флэш решил изучить : ))))) ?

Учиться никогда не поздно, и я не стыжусь что я не всё знаю. :)



2Nox

> нуран, ты меня убиваешь... как ты писал свои движки, не пользуясь такими вещами? :)

Ну там шло сравнение поэлементно ... к томуже каждый объект имел свои функции сравнения.


типа Vector.Operater_MoreThan(someVector);

Да, похоже придётся делать перебор ...




просто большой проект делаю, приходится всё мои минусы исправлять ;)

Спасибо, нокс.

Nox Noctis
24.11.2004, 18:27
Оригинал написал(а) Штрек
А что
a.slice(0)
не катит? я разве говорил что не катит? :)
просто копирование конкатом уже в привычку вошло

nuran
24.11.2004, 18:27
не думайте что я совсем уж глупый ;) просто ищу самые лучшие пути реализации :)

надо двигаться в ногу со временем :)

nuran
24.11.2004, 18:33
Кстати, чтобы это работало, у всех объектов в массове должны быть методы toString ();

Nox Noctis
24.11.2004, 19:27
Оригинал написал(а) nuran
Кстати, чтобы это работало, у всех объектов в массове должны быть методы toString (); он у всех объенктов и так есть. просто нужно его у каждого объекта персонально переписать. иначе там будет "[object Object]" в качестве тустринга. вобщем это я и назвал извращениями :)

DeliMIter
24.11.2004, 20:06
Не, мы тебя не считаем совсем глупым : )))
Лан, это я просто жестко излагаю то, что Нокс сказал мягко. Очень странным смотрятся рядом авторство трехмерных движков и... нет, не незнание. Ни в коем случае. Не знать - это личное право каждого. Но - неспособность самому придумать алгоритм, отыскав для этого достаточно несложные (а операции с массивами в хелпе отнюдь не спрятаны) ходы. Вот что настораживает. Трехмерные расчеты - это достаточно сложная и кропотливая работа, требующая внимания, усердия, и действительно способности находить решения, не лежащие на поверхности. Не подумай, никаких упреков, никаких претензий, только вот это странное чувство несоответствия...

nuran
24.11.2004, 21:01
О боже! Опять намёки на плагиат :(

Whatsername
25.11.2004, 11:31
chr(31) взято просто на случай если в массивах лежат строки. символ chr(31) как правило в строках не встречается :) поэтому можно его взять в качестве разделителя. (а можно при необходимости другой символ) [/B]
Не догоняю зачем join(chr(31)) использовать? Разве toString() дает другой результат?

Nox Noctis
25.11.2004, 12:02
нужно джойнить с таким разделителем, который гарантированно не встречается внутри элементов массивов.

иначе получится вот что:

a = ["test1,test2", "test3"];
b = ["test1", "test2", "test3"];
trace(b.join() == a.join());

выдаёт true, хотя массивы имеют разные элементы.

Whatsername
25.11.2004, 12:34
Тонко! Спасибо, Нокс : )