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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.06.2008, 12:09
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 11  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Цитата:
Сообщение от uglan Посмотреть сообщение
Мне кажется массив удобнее(без заморочки с кучей childNodes), если он вообще может работать с тройной структурой.
Можно даже в строку твою трёх уровневую структуру записать

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

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Цитата:
Сообщение от qazwsx Посмотреть сообщение
Код:
var a:Array = [];
a[0] = [];
a[0][0] = ':Q';
trace(a[0][0]);
А вот так не работает
Код:
var a:Array = [];
a[0] = [];
a[0][0] = 'AGA';
a[0][0][0] = []
a[0][0][0] = 'UGU';
trace(a[0][0][0]);
__________________
uglan

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

Регистрация: May 2008
Сообщений: 476
Что некорректно в этом коде?!

Код:
var arr:Array = [];
arr[0] = []
arr[0][0] = "ege"
arr[0][1] = "fgh"
trace(arr[0].length)
//Выведет 2

Здесь без потери ранее записанных данных при изменении размерности массива не обойтись. Потому и не работает.
Нужно определить размерность массива заранее. А вот размер каждого измерения Вы можете создавать динамически.
Цитата:
Код:
var a:Array = [];
a[0] = [];
a[0][0] = 'AGA';
a[0][0][0] = []
a[0][0][0] = 'UGU';
trace(a[0][0][0]);
Давайте разберем этот код подробнее для понимания проблемы.

В первой строке Вы создаете одномерный массив a.
Во второй строке, Вы создаете второе измерение массива a
В третьей строке Вы присваиваете ячеке двумерного массива значение "АGA". Пока все вроде бы корректно.
В четвертой строке, Вы пытаетесь создать уже четвертое измерение минуя 3. Разумеется это невозможно. Поэтому, Вы вынуждены будете ячейку a[0][0] =="AGA" переопределить массивом создающим 3-е измерение. Разумеется "AGA" сохранено не будет.

Код:
var a:Array = [];
a[0] = [];
a[0][0] = 'AGA';
a[0][0] = []
a[0][0][0] = 'UGU';
trace(a[0][0][0]);
//"AGA" больше не существует!!!
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 26.06.2008 в 12:28.
Старый 26.06.2008, 12:14
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 14  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
А вот так не работает:
var a:Array = [];
a[0][0][0] = [];
a[0][0][0] = ':Q';
trace(a[0][0][0]);

А вот так
var arr:Array = [];
Код:
arr[0] = []
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
arr[3] = "4"
arr[0][0] = "ege"
arr[0][1] = "fgh"
trace(arr[0].length)
Выведет 1...

Чтобы создать цикл мне нужно будет знать длину каждого уровня массива.
for(i=0;i<arr.length;++i){
for(u=0;u<arr[i].length;++u){
}
}
...
__________________
uglan


Последний раз редактировалось alexcon314; 26.06.2008 в 13:37.
Старый 26.06.2008, 13:38
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 15  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
uglan, не надо постить несколько сообщений подряд. Пользуйтесь кнопкой "Изменить"

Старый 26.06.2008, 13:55
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 16  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Давайте разберем этот код подробнее для понимания проблемы.

В первой строке Вы создаете одномерный массив a.
Во второй строке, Вы создаете второе измерение массива a
В третьей строке Вы присваиваете ячеке двумерного массива значение "АGA". Пока все вроде бы корректно.
В четвертой строке, Вы пытаетесь создать уже четвертое измерение минуя 3. Разумеется это невозможно. Поэтому, Вы вынуждены будете ячейку a[0][0] =="AGA" переопределить массивом создающим 3-е измерение. Разумеется "AGA" сохранено не будет.

Код:
var a:Array = [];
a[0] = [];
a[0][0] = 'AGA';
a[0][0] = []
a[0][0][0] = 'UGU';
trace(a[0][0][0]);
//"AGA" больше не существует!!![/quote]

Хорошо в таком случае как мне задействовать каждый уровень?
то есть чтобы значения хранились тут
a[0] = 1
a[1] = 1
и на других уровнях
a[0][0] = 2
a[0][1] = 2
a[0][2] = 2
a[1][0] = 2.1
a[1][1] = 2.2
a[1][2] = 2.1

и т.д.
__________________
uglan

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

Регистрация: May 2008
Сообщений: 476
uglan!

Давайте разберем и этот код.

Цитата:
Код:
arr[0] = []
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
arr[3] = "4"
arr[0][0] = "ege"
arr[0][1] = "fgh"
trace(arr[0].length)



В первой строке Вы создаете второе измерение не создав первое (ошибка).
В последующих четырех строках Вы записываете значения в 4 ячейки несуществующего одномерного массива.
А вот в третьей и четвертой пытаетесь присвоить значение не существующей ячейке несуществующего двумерного массива (массив arr на этот момент одномерный). Поэтому length выдает что попало (в данном случае 1).
Как на самом деле должен выглядеть этот код?!

Вот так:
Код:
arr = []
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
arr[3] = "4"
arr[0] = []; создаем пустой массив-измерение в ячейке [0]
arr[0][0] = "ege"
arr[0][1] = "fgh"
trace(arr[0].length)
Но! ячейка arr[0] будет переопределена вторым измерением.

Цитата:
Код:
Хорошо в таком случае как мне задействовать каждый уровень?
то есть чтобы значения хранились тут
a[0] = 1
a[1] = 1
и на других уровнях
a[0][0] = 2
a[0][1] = 2
a[0][2] = 2
a[1][0] = 2.1
a[1][1] = 2.2
a[1][2] = 2.1
Я уже говорил, что с размерностью (не путать с размером измерения) нужно сразу определиться. Давайте попробуем создать двухступенчатую иерархию вот так:

Код:
a = []
a[0] = 1;
a[1] = [];
a[1][0] = 2;
a[1][1] = [];
...
По аналогии можно создать любую иерархию.
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 26.06.2008 в 14:11.
Старый 26.06.2008, 14:14
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 18  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Во флеше нет трехмерных массивов.
Но можно использовать Массив массивов.

Конструкция вида

Код:
var zeroObject:Object = new Object();

var coordinats:Array= new Array();
coordinats[0] = new Array();
coordinats[0][0] = new Array();
coordinats[0][0][0] = zeroObject;
Лишь имитирует многомерный массив

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

Регистрация: May 2008
Сообщений: 476
Цитата:
Во флеше нет трехмерных массивов.
Если уж говорить на чистоту, то во Флеше вообще нет массивов в том понимании, что присутствует в базовых языках (Delphi, C++).
Проблема здесь не в создании вложенных массивов, а в сохранности данных на каждом иерархическом уровне при их создании. Как говориться Заказчик хочет и "из ружья не выстрелить и двух зайцев убить".
__________________
Случайность, господа, это знаете ли непознанная необходимость.

Старый 26.06.2008, 17:02
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 20  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Разочарован... Не знаю как в C++ но в VB точно можно было делать массивы такого вида какой угодно длины. a[0][0][0][0]...
Значит буду использовать xml.

Всем спасибо!
__________________
uglan

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

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

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


 


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


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