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

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

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

Регистрация: Nov 2012
Сообщений: 31
По умолчанию Вопрос про доступ к свойствам объектов, или ассоциативные массивы

Привет!

Как облегчить такую конструкцию?

Код AS3:
	// name = 'some.where.in.galactic'
			// stack:Object {ой блин....}
 
			var fragments:Array = name.split('.');
			switch (fragments.length)
			{ 
				case 1:
					return stack[name];
					break;
				case 2:
					return stack[fragments[0]][fragments[1]];
					break;
				case 3:
					return stack[fragments[0]][fragments[1]][fragments[2]];
					break;
				case 4:
					return stack[fragments[0]][fragments[1]][fragments[2]][fragments[3]];
					break;
				case 5:
					return stack[fragments[0]][fragments[1]][fragments[2]][fragments[3]][fragments[4]];
					break;
				case 6:
					return stack[fragments[0]][fragments[1]][fragments[2]][fragments[3]][fragments[4]][fragments[5]];
					break;
			}

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Nмерный массив это круто, а смысл (задача какая)?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 30.11.2012, 23:22
Ленок вне форума Посмотреть профиль Отправить личное сообщение для Ленок Найти все сообщения от Ленок
  № 3  
Ответить с цитированием
Ленок

Регистрация: Nov 2012
Сообщений: 31
Приходят данные произвольной структуры, надо с ними работать.

А в AS3 нет средств, позволяющих лаконично написать такой код? Надо сделать сеттер и геттер. Первый получает ключ массива произвольной глубины (land.town.tower.room...) и значение, создает указанный элемент. Второй получает ключ, и возвращает значение по нему.

Как указывать на элементы объекта?


Страшный сеттер

Код AS3:
var fragments:Array = name.split('.');
			if (fragments.length == 1)
			{
				stack[name] = value;
			}
			if ((stack[fragments[0]] == undefined) && (fragments.length > 1))
			{
				stack[fragments[0]] = {};
			}
			if ((stack[fragments[1]] == undefined) && (fragments.length > 2))
			{
				stack[fragments[0]][fragments[1]] = {};
			}
			if ((stack[fragments[2]] == undefined) && (fragments.length > 3))
			{
				stack[fragments[0]][fragments[1]][fragments[2]] = {};
			}
			switch (fragments.length)
			{
				case 2:
					stack[fragments[0]][fragments[1]] = value;
					break;
				case 3:
					stack[fragments[0]][fragments[1][fragments[2]] = value;
					break;
				case 4:
					stack[fragments[0]][fragments[1][fragments[2]][fragments[3]] = value;
					break;
			}
И что? Неужели это должно быть именно так ужасно?

Старый 30.11.2012, 23:38
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Хеш?

Код AS3:
private var _hash:Object = {};
_hash[name] = 'value';
 
...
 
return _hash[name];
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 30.11.2012, 23:41
Ленок вне форума Посмотреть профиль Отправить личное сообщение для Ленок Найти все сообщения от Ленок
  № 5  
Ответить с цитированием
Ленок

Регистрация: Nov 2012
Сообщений: 31
Хеш. Но вот так не работает:

Код AS3:
key = 'one.two.three.four.five';
value = 'Sun';
stack[key] = value;
return stack.one.two.three.four.five; // не работает
Предполагаю, что stack['one.two.three.four.five'] это не то же, что stack.one.two.three.four.five

Коллеги, можете проверить?

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
stack['one.two.three.four.five'] то же самое что и stack[key]

return stack['one.two.three.four.five'] только так.

Добавлено через 1 минуту
stack.one.two.three.four.five это какой-то динамический ад.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 30.11.2012, 23:51
Ленок вне форума Посмотреть профиль Отправить личное сообщение для Ленок Найти все сообщения от Ленок
  № 7  
Ответить с цитированием
Ленок

Регистрация: Nov 2012
Сообщений: 31
Код AS3:
stack['one.two.three.four.a'] = 'A';
stack['one.two.three.four.b'] = 'B';
one.two.three.four - существует и содержит {a:'A',b:'B'} ?

for each (letter in one.two.three.four) - будет работать?

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
one.two.three.four - существует и содержит {a:'A',b:'B'} ?

for each (letter in one.two.three.four) - будет работать?
нет
нет
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 30.11.2012, 23:54
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 9  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Не будет.

Старый 30.11.2012, 23:56
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 10  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
если я начал понимать вашу задачу, то вам нужна рекурсия.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

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

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


 


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


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