Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Количество элементов в массиве (http://www.flasher.ru/forum/showthread.php?t=202532)

AlexCooper 22.07.2013 13:36

Цитата:

Сообщение от caseyryan (Сообщение 1141650)
А моя идея в том, что у него ошибка вообще с чем-то другим связана.

Вполне возможно, но мне все же кажется проблема изначально в "ручном" заполнении массива. И наче какие могут быть проблемы при изменении размерности массива.

AlexLucas 22.07.2013 13:54

Текст ошибки в студию.

wvxvw 22.07.2013 15:03

Когда говорят про элементы массива, то имеют в виду именно то, что находится в array.length. Если у вас есть какие-то дополнительные требования, например, вам нужны только уникальные элементы, только те, которые не равны null / undefined и т.п. - это нужно уточнять, иначе вас не поймут.

AlexCooper 22.07.2013 15:32

Цитата:

Сообщение от wvxvw (Сообщение 1141671)
Когда говорят про элементы массива, то имеют в виду именно то, что находится в array.length. Если у вас есть какие-то дополнительные требования, например, вам нужны только уникальные элементы, только те, которые не равны null / undefined и т.п. - это нужно уточнять, иначе вас не поймут.

Хм... то-есть по Вашим словам этот массив не имеет элементов?
Код AS3:

var arr:Array = new Array();
arr['test'] = Math.random();
 
trace(arr.length); // 0


WisP 22.07.2013 16:03

А с чего вы взяли, что в arr.length именно 0.
Позволю себе повторить цитату: Although ActionScript permits you to create associative arrays using the Array class, you cannot use any of the Array class methods or properties with associative arrays.

AlexCooper 22.07.2013 16:16

Цитата:

Сообщение от WisP (Сообщение 1141680)
А с чего вы взяли, что в arr.length именно 0.

Это не я взял, так говорит компилятор.

AlexLucas 22.07.2013 16:26

@WisP, вы же сами это написали :)
Цитата:

Although ActionScript permits you to create associative arrays using the Array class, you cannot use any of the Array class methods or properties with associative arrays.
Геттер length учитывает только объекты с ключами типа uint.

WisP 22.07.2013 17:07

AlexLucas, ну так написано же: нельзя использовать методы или свойства класса Array с ассоциативными массивами.
В том числе, как только вопреки здравому смыслу возникло желание добавить строковый ключ, length использовать нельзя и обсуждение результата, который возвращает length уже не имеет смысла.

iNils 22.07.2013 17:48

Цитата:

Сообщение от AlexCooper (Сообщение 1141642)
Код AS3:

function myLength(arr:Array):uint {
    var leng:uint = 0;
    for ( var i:String in arr ) leng++;
    return leng;
 
}
 
var s:Array = new Array();
        s[1] = true;
        s[2] = true;
        s[5] = true;
 
trace(s.length); // 6
trace( myLength(s) ); // 3
 
s['t'] = true;
 
trace(s.length); // 6
trace( myLength(s) ); // 4


О чем я и говорил. Ни какой ошибки нет, элементов в массиве 6 штук и занимают позиции: 0,1,2,3,4,5.

AlexLucas 22.07.2013 17:49

Не нельзя, а не рекомендуется, раз ошибку не выдаёт - значит можно. И результат в том случае всегда будет 0.


Часовой пояс GMT +4, время: 00:26.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.