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

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

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

Регистрация: May 2009
Сообщений: 14
По умолчанию Массив самостоятельно сортируется

Упёрся в нерешаемую проблему — флеш самостоятельно сортирует массив, причём в непонятном мне порядке.

Код AS3:
var test:Array = new Array();
test[0] = 2760;
test[1] = 5770;
test[2] = 5130;
test[3] = 5199;
test[4] = 1000;
 
var test2:Array = new Array();
 
for (var obj:String in test) {
	trace(obj + " " + test[obj]); // просматриваю исходный массив
	test2[test[obj]] = test[obj];
}
 
trace();
 
for (var obj2:String in test2) {
	trace(obj2 + " " + test2[obj2]); // сравниваю со вторым
}
Результат trace:
Код:
// исходный массив
0 2760
1 5770
2 5130
3 5199
4 1000

// получившийся массив
2760 2760
1000 1000
5770 5770
5130 5130
5199 5199
Т.е. "1000" вдруг перепрыгнула. Подскажите, пожалуйста, где я натупил?

Старый 15.04.2010, 17:38
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 2  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Цикл for in берет элементы не по порядку, т.к. свойства объекта не хранятся по порядку, а случайным образом. Используйте for.

Старый 15.04.2010, 17:42
Tahion вне форума Посмотреть профиль Отправить личное сообщение для Tahion Найти все сообщения от Tahion
  № 3  
Ответить с цитированием
Tahion

Регистрация: Apr 2010
Сообщений: 57
Обычно они в обратном порядке идут)

Старый 15.04.2010, 17:45
Anghram вне форума Посмотреть профиль Отправить личное сообщение для Anghram Найти все сообщения от Anghram
  № 4  
Ответить с цитированием
Anghram

Регистрация: May 2009
Сообщений: 14
for each, как я понимаю, действует по тому же принципу? Зачем такая грабля вообще нужна? Кому вдруг понадобится случайным образом выбирать элементы массива?

for не могу применять, т.к. у меня не все элементы заполнены. Т.е. типа такого:
user[123]['name'] = "Petya"
user[123]['surname'] = "Ivanov"
user[427]['name'] = "Vanya"
user[427]['surname'] = "Sidorov"

Добавлено через 33 секунды
Цитата:
Сообщение от Tahion Посмотреть сообщение
Обычно они в обратном порядке идут)
Как я уже показал в примере — они идут в необъяснимом порядке Если добавить побольше элементов — там вообще трешняк получается.

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от Anghram Посмотреть сообщение
for не могу применять, т.к. у меня не все элементы заполнены. Т.е. типа такого:
Пропускайте пустые элементы.
Код AS3:
if(array[iter])
{
//ода, элемент есть
}
И for each это не грабля. Не всегда нужно перебирать массив по порядку.

Старый 15.04.2010, 17:58
Anghram вне форума Посмотреть профиль Отправить личное сообщение для Anghram Найти все сообщения от Anghram
  № 6  
Ответить с цитированием
Anghram

Регистрация: May 2009
Сообщений: 14
1. Почему тогда в первом случае массив проходится в нужном порядке, а глючит лишь второй?

2. Проблема в том, что у меня разброс айдишников от 1 до 50 миллионов.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Кому вдруг понадобится случайным образом выбирать элементы массива?
Это не элементы массива, это свойства объекта.

Цитата:
for..in
Выполняет итерацию через динамические свойства объекта или элементы массива и выполняет инструкцию statement для каждого свойства или элемента. Свойства объекта не хранятся в определенном порядке, поэтому могут отображаться в произвольной последовательности.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 15.04.2010 в 18:08.
Старый 15.04.2010, 18:57
Anghram вне форума Посмотреть профиль Отправить личное сообщение для Anghram Найти все сообщения от Anghram
  № 8  
Ответить с цитированием
Anghram

Регистрация: May 2009
Сообщений: 14
*запутался*

Допустим, свойства объекта идут в произвольном порядке. Но причём тут объекты, если речь идёт о массивах?

Старый 15.04.2010, 19:01
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Массив тоже объект.

Старый 15.04.2010, 19:09
Anghram вне форума Посмотреть профиль Отправить личное сообщение для Anghram Найти все сообщения от Anghram
  № 10  
Ответить с цитированием
Anghram

Регистрация: May 2009
Сообщений: 14
Понял.

Я правильно понимаю, что последовательно пройти по массиву-объекту можно лишь используя for?

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

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

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


 


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


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