Форум 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)

tooth212 22.07.2013 00:48

Количество элементов в массиве
 
Добрый день, как можно посчитать элементы массива?
Делал вот так:
Код AS3:

myarr.length

Но если элемент один, то выдается ошибка, как можно поправить код?

tsarapkabel 22.07.2013 01:11

Какая ещё ошибка? Никаких ошибок!
Код AS3:

var arr:Array = new Array();
trace(arr.length) //0;
 
arr.push(1);
trace(arr.length); //1


AlexCooper 22.07.2013 02:04

Не всегда
Код AS3:

arr.length

выдает правильно количество элементов в массиве. В частности когда происходят операции присвоении или удалении элементов массива через индекс ( то-есть не используя команды push, pop, shift и т.д.) Потому этот вариант думаю решит ваш вопрос
Код AS3:

 
function myLength(arr:Array):uint {
    var leng:uint = 0;
    for ( var i:String in arr ) leng++;
    return leng;
 
}
trace( myLength(myarr) );


iNils 22.07.2013 02:12

Цитата:

Сообщение от AlexCooper (Сообщение 1141622)
Не всегда
Код AS3:

arr.length

выдает правильно количество элементов в массиве. В частности когда происходят операции присвоении или удалении элементов массива через индекс ( то-есть не используя команды push, pop, shift и т.д.)

Да ладно? Сколько лет работаю с AS и не разу ни с чем подобным не сталкивался. Или вы про то, что в середине массива присвоили значение null, а length не изменился? Так и должно быть. Ведь элемент все равно существует и его значение null.

caseyryan 22.07.2013 07:55

Цитата:

Но если элемент один, то выдается ошибка
Интересно посмотреть, что за ошибка
готов поспорить, что она не связана с количеством элементов в массиве

Цитата:

Сообщение от AlexCooper (Сообщение 1141622)
Не всегда
Код AS3:

arr.length

выдает правильно количество элементов в массиве. В частности когда происходят операции присвоении или удалении элементов массива через индекс ( то-есть не используя команды push, pop, shift и т.д.) Потому этот вариант думаю решит ваш вопрос
Код AS3:

 
function myLength(arr:Array):uint {
    var leng:uint = 0;
    for ( var i:String in arr ) leng++;
    return leng;
 
}
trace( myLength(myarr) );


А как по вашему работает геттер get length?
Не так же?

AlexCooper 22.07.2013 11:41

Код 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


WisP 22.07.2013 11:54

http://help.adobe.com/en_US/FlashPla...t/3/Array.html
К вопросу о первом "trace(s.length); // 6":
Цитата:

Arrays are sparse arrays, meaning there might be an element at index 0 and another at index 5, but nothing in the index positions between those two elements. In such a case, the elements in positions 1 through 4 are undefined, which indicates the absence of an element, not necessarily the presence of an element with the value undefined.
Касательно "s['t'] = true;"
Цитата:

Do not use the Array class to create associative arrays (also called hashes), which are data structures that contain named elements instead of numbered elements. To create associative arrays, use the Object class. 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 12:19

WisP Спорить с Вами не стану, потому как это я и имел ввиду что если редактировать массив в ручном режиме ( не используя команды push, pop, shift и т.д. ( ну и естественно заполнение циклом или "индуским" методом )) то получиться то что получается у ТС. Других идей у меня нет почему у человека может выдавать "ошибку" arr.length кроме того что идет не правильный подход в использовании массива.

caseyryan 22.07.2013 13:07

Цитата:

Других идей у меня нет почему у человека может выдавать "ошибку" arr.length кроме того что идет не правильный подход в использовании массива.
А моя идея в том, что у него ошибка вообще с чем-то другим связана.

WisP 22.07.2013 13:11

О чем спорить-то))) Я просто указал на пару "стратегических" мест в коде и дал линк на статью, с которой не помешало бы ТС ознакомиться. Чтобы "мистические" ошибки не мешали работе.


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

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