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

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

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

Регистрация: Aug 2011
Сообщений: 49
По умолчанию Вопрос по заполнению многомерного массива.

Почитав, форум написал следующее:

Код AS3:
if (commandBlock.added)
{				
	var numChildren:uint = this.codeCont.codePlateSp.numChildren;
 
	for (var i:uint = 0; i < numChildren; i++)
	{
		var block:commandBlock = this.codeCont.codePlateSp.getChildAt(i) as commandBlock;
 
		instruct = block.getCommand;				
 
		commandArray[instruct.charAt(0)].push(instruct.charAt(1));
		commandArray[instruct.charAt(0)][instruct.charAt(1)] =  instruct.substr(2,3);
 
		trace(commandArray["A"]);
	}				
}
У меня, например, цикл выполняется два раза, первый раз instruct получает строку "A11RA", второй раз "A01HO".
Все это я хочу запихать в двумерный массив так, чтобы в commandArray были массивы с названием Первых букв в строке, в которых лежат элементы с названием из вторых символов строк, в которых лежат остальные три буквы.
Соответственно чисто теоритически, в данном примере должен быть массив commandArray, в котором есть массив A, в котором два массива: 1, в котором лежит 1RA и 0, в котором лежит 1HO.


Но он выдает: TypeError: Error #1010: Термин не определен и не имеет свойств.

Код конечно диковатый, но все же, что собственно не так?)


Последний раз редактировалось fantomasdnb; 03.10.2011 в 22:22.
Старый 03.10.2011, 22:40
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Код:
if (commandBlock.added)
{				
	var numChildren:uint = this.codeCont.codePlateSp.numChildren;
 
	for (var i:uint = 0; i < numChildren; i++)
	{
		var block:commandBlock = this.codeCont.codePlateSp.getChildAt(i) as commandBlock;
 
		instruct = block.getCommand;				
 		commandArray[instruct.charAt(0)] = [];
		commandArray[instruct.charAt(0)].push(instruct.charAt(1));
		commandArray[instruct.charAt(0)][instruct.charAt(1)] =  instruct.substr(2,3);
 
		trace(commandArray["A"]);
	}
Добавлено через 2 минуты
И кстати, push кладёт значение на индекс length, а [] обращается по ключу.
Т.е. Массив ["a","b",c"], сделать push("d") - получим ["a","b","c","d"], при этом индекса "d" не существует: существует элемент с индексом 3, значение которого "d".

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

Регистрация: Aug 2011
Сообщений: 49
да я писал эту зеленую строчку, но результат получался не такой какой надо, трейс выводил:
1,1RA
1HO
тоесть он явно выводил не полно.
Подскажите тогда , как сделать не через пуш, чтобы был индекс ?

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
по индексу
Код AS3:
array[index] = value;
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Aug 2011
Сообщений: 49
блин, я не так сказал наверное. Вобщем я хочу, чтоб по сути обращение было:
Код AS3:
commandArray["A"]["0"] = "1HO";
Если я просто равно напишу, я просто значение заменю значение, а мне надо чтобы в А добавлялись другие массивы.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Код AS3:
commandArray = {};
commandArray["A"] = {};
commandArray["A"]["0"]="1HO";

Старый 04.10.2011, 00:50
fantomasdnb вне форума Посмотреть профиль Отправить личное сообщение для fantomasdnb Найти все сообщения от fantomasdnb
  № 7  
Ответить с цитированием
fantomasdnb

Регистрация: Aug 2011
Сообщений: 49
и так код теперь выглядит так

Код AS3:
 
if (commandBlock.added)
{				
	var numChildren:uint = this.codeCont.codePlateSp.numChildren;
 
	for (var i:uint = 0; i < numChildren; i++)
	{
		var block:commandBlock = this.codeCont.codePlateSp.getChildAt(i) as commandBlock;					
		instruct = block.getCommand;								
 
		commandArray[instruct.charAt(0)]={};
		commandArray[instruct.charAt(0)][instruct.charAt(1)] = instruct.substr(2,3);
 
 
 
	}				
	trace(commandArray["A"]["1"]);
	trace(commandArray["A"]["0"]);
}
но строка commandArray["A"] = {}; на втором шаге цикла, убивает всё что было добавлено на первом, тоесть трейс выводит
undefined
1HO

Старый 04.10.2011, 01:49
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Ну да. Вы создаете на каждой итерации новый хэш. А надо создать его один раз. А в цикле всё повторяется. Скажите мне, что надо сделать?

Старый 04.10.2011, 02:01
fantomasdnb вне форума Посмотреть профиль Отправить личное сообщение для fantomasdnb Найти все сообщения от fantomasdnb
  № 9  
Ответить с цитированием
fantomasdnb

Регистрация: Aug 2011
Сообщений: 49
ну собственно, я пытаюсь сделать реализацию машины Тьюринга. Я собираю все инструкции, которые были введены. Соответственно, для каждого состояния (A,B,C), в зависимости от символа на ленте (1,0) выполнять команду 1RH,0HO. Решил использовать подобную структуру, т.к. очень легко искать действие по состоянию и символу.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Я не о том )
Я ожидал услышать что-то вроде: "Ааа, ну надо ведь чтобы хэш создался один раз. Надо вынести его за тело цикла!", но Ваш ответ тоже неплох )

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

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

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


 


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


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