Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.07.2013, 00:48
tooth212 вне форума Посмотреть профиль Отправить личное сообщение для tooth212 Найти все сообщения от tooth212
  № 1  
Ответить с цитированием
tooth212

Регистрация: Dec 2012
Сообщений: 172
Question Количество элементов в массиве

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

Старый 22.07.2013, 01:11
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 2  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Какая ещё ошибка? Никаких ошибок!
Код AS3:
var arr:Array = new Array();
trace(arr.length) //0;
 
arr.push(1);
trace(arr.length); //1
__________________
Нормально делай — нормально будет!

Старый 22.07.2013, 02:04
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 3  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Не всегда
Код 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) );
__________________
return this...

Старый 22.07.2013, 02:12
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от AlexCooper Посмотреть сообщение
Не всегда
Код AS3:
arr.length
выдает правильно количество элементов в массиве. В частности когда происходят операции присвоении или удалении элементов массива через индекс ( то-есть не используя команды push, pop, shift и т.д.)
Да ладно? Сколько лет работаю с AS и не разу ни с чем подобным не сталкивался. Или вы про то, что в середине массива присвоили значение null, а length не изменился? Так и должно быть. Ведь элемент все равно существует и его значение null.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 22.07.2013, 07:55
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Но если элемент один, то выдается ошибка
Интересно посмотреть, что за ошибка
готов поспорить, что она не связана с количеством элементов в массиве

Цитата:
Сообщение от AlexCooper Посмотреть сообщение
Не всегда
Код 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?
Не так же?

Старый 22.07.2013, 11:41
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 6  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Код 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
__________________
return this...

Старый 22.07.2013, 11:54
WisP вне форума Посмотреть профиль Отправить личное сообщение для WisP Найти все сообщения от WisP
  № 7  
Ответить с цитированием
WisP

Регистрация: Sep 2003
Сообщений: 28
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.

Старый 22.07.2013, 12:19
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 8  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
WisP Спорить с Вами не стану, потому как это я и имел ввиду что если редактировать массив в ручном режиме ( не используя команды push, pop, shift и т.д. ( ну и естественно заполнение циклом или "индуским" методом )) то получиться то что получается у ТС. Других идей у меня нет почему у человека может выдавать "ошибку" arr.length кроме того что идет не правильный подход в использовании массива.
__________________
return this...

Старый 22.07.2013, 13:07
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Других идей у меня нет почему у человека может выдавать "ошибку" arr.length кроме того что идет не правильный подход в использовании массива.
А моя идея в том, что у него ошибка вообще с чем-то другим связана.

Старый 22.07.2013, 13:11
WisP вне форума Посмотреть профиль Отправить личное сообщение для WisP Найти все сообщения от WisP
  № 10  
Ответить с цитированием
WisP

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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