![]() |
|
||||||||||
|
|||||
|
iNils прошу прощения. А где элемент с индексом 't'?
__________________
return this... |
|
|||||
|
Регистрация: Sep 2003
Сообщений: 28
|
Могу только предложить обратиться к словарю.
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
А он разве там должен быть? Вы справку читали? Если вы возьмете молоток, и начнется вместо гвоздя бить по пальцу, то тоже скажите, что молоток не работает? У Array есть четкая логика работы с элементами массива. Индекс элемента - число. Длина массива, это не количество добавленных туда элементов, это число элементов между последним и первым индексами. Потому что массив непрерывен. И даже, если вы туда что-то не поместили, ячейка резервируется.
У MovieClip нет свойства length, но можно написать так Ничего не напоминает? Может MovieClip тоже не правильно работает? |
|
|||||
|
iNils Согласен с Вами и признаю что считал запись вида
как запись в массив значения с индексом t. Но в свою очередь не использую такой подход, может на ранних этапах программирования, потому и предположил что подобную ошибку мог допустить ТС.
__________________
return this... |
|
|||||
|
Modus ponens
|
Цитата:
Поведение которое вы видите не типично для массивов вообще, и является случайным артефактом, продуктом наследования + специфики реализации динамического доступа. Лучше об этом думать как о методе `[]` определенном на классе Array таким образом, что будучи вызваным со строкой в качестве индекса не вернет элемент по индексу, а значение динамически созданного свойства.
__________________
Hell is the possibility of sanity |
|
|||||
|
listener
|
Вспомнился давний холивар на тему "массивы в AS индексируются строками". Что-то тогда много всякого наговорили.. правда, AS 3.0 тогда еще не было вроде даже.
var arr:Array = new Array(); arr['0'] = 123456; trace(arr.length); // 1 trace(arr[0]); //123456 |
|
|||||
|
Цитата:
uint32 ArrayObject::get_length() const {
return getLength();
}
/*virtual*/ uint32 ArrayObject::getLength() const {
return m_length;
}
uint32 ArrayObject::AS3_push(Atom* argv, int argc) {
if (isSimpleDense()) {
m_denseArr.push (argv, argc);
m_length += argc;
} else {
for (int i=0; i < argc; i++) {
_setUintProperty(getLength(), argv[i]);
}
}
return m_length;
}
Добавлено через 2 часа 58 минут Результаты тестов: 0 => 987, 987, 0 1000 => 987, 987, 0 10000000 => 1929, 1929, 0 addEventListener(MouseEvent.CLICK, clickHandler) var arr:Array = []; var currLength:int; var t0:int; var t1:int; var i:int; function clickHandler(e:MouseEvent):void { calculateAndAppendData() for (i = 0; i < 1000; i++) { arr.push(Math.random()) } calculateAndAppendData(); arr = []; for (i = 0; i < 10000000; i++) { arr.push(Math.random()) } calculateAndAppendData(); } function calculateAndAppendData():void { t0 = getTimer(); currLength = arr.length; t1 = getTimer(); tf.appendText(currLength + " => " + t0 + ", " + t1 + ", " + (t1 - t0) + "\n"); } Последний раз редактировалось FlashRus; 23.07.2013 в 12:04. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|