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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.05.2013, 12:08
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 1  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
По умолчанию Удаление элемента ассоциативного массива.

Подскажите плиз.
Создан ассоциативный массив:
Код AS3:
var sprt:Sprite = new Sprite();
var assArr:Object = new Object();
assArr["sprite1"] = sprt;
Вопрос: достаточно ли будет для удаления элемента ассоциативного массива написать:
Код AS3:
assArr["sprite1"] = null;
Речь идёт об удалении элемента ассоциативного массива, а не об удалении спрайта sprt.
Если можете поправить на предмет правильности удаления элементов из асс.массива - подскажите плз.

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

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
Доброго времени суток. " = null " - неправильное решение, для удаления элемента массива есть "delete"

Код AS3:
var ht:Object = {};
var val:* = "Hello, World!";
ht["key"] = val;
for each(val in ht) trace(val);
 
delete ht["key"];
for each(val in ht) trace(val);

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Код AS3:
var sprt:Sprite = new Sprite();
var assArr:Object = { }; // То же что и assArr:Object = new Object();
 
trace( assArr["sprite1"] ); // undefined
 
assArr["sprite1"] = sprt;
trace( assArr["sprite1"] ); // [object Sprite]
 
assArr["sprite1"] = null;
trace( assArr["sprite1"] ); // null
 
assArr["sprite1"] = sprt;
delete assArr["sprite1"];
trace( assArr["sprite1"] ); // undefined
 
var prop:String;
trace("-- 1 --");
assArr["sprite1"] = sprt;
for (prop in assArr) trace(prop); // sprite1
 
trace("-- 2 --");
assArr["sprite1"] = null;
for (prop in assArr) trace(prop); // sprite1
// Динамическое свойство 'sprite1' остается в объекта
// просто теперь оно равно null.
 
trace("-- 3 --");
assArr["sprite1"] = sprt;
delete assArr["sprite1"];
for (prop in assArr) trace(prop); // nothing
// Здесь же удаляется само свойство.
Вот описание оператора delete. Обратите внимание, что delete удаляет только динамически созданные свойства объектов (assArr["sprite1"] таковым является). В целом же, если речь идет об удалении ссылок на объекты, с целью сделать их доступными для сборщика мусора, достаточно занулить ссылку (assArr["sprite1"] = null).

Старый 07.05.2013, 14:35
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 4  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Спасибо, буду разбираться.

Добавлено через 13 минут
И ещё прошу уточнить, в том случае если речь идёт о многомерной структуре данных заложенной в ассоциативный массив.
Если элементом ассоциативного массива assArr является многомерный массив assArr["myarray3"] (в моём случае трёхмерный) то если написать:
Код AS3:
delete assArr["myarray3"];
то удалятся все элементы всех уровней массива assArr["myarray3"]?

Старый 07.05.2013, 14:54
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 5  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Chum,а вы сами попробуйте, это же дело трех минут.
__________________
hauts.ru

Старый 07.05.2013, 15:40
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 6  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Есть вещи которые разным людям даются по-разному. Есть области знаний которые требуют точной уверенности в том что результат именно такой и никакой другой и в этом случае я например, предпочитаю спросить.

Старый 07.05.2013, 15:53
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
то удалятся все элементы всех уровней массива assArr["myarray3"]?
Удалится только ссылка на массив по ключу "myarray3". Его содержимое останется в памяти, пока не придет GC и не удалит все сам, если это возможно.
__________________
тут я

Старый 07.05.2013, 16:13
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 8  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Тогда как я понял в моём случае необходимо взять элемент ассоциативного массива, а это трёхмерный массив (класс Array) и обнулить(=null) тройным циклом каждый элемент массива, а уж затем обнулить или удалить (delete) и сам массив, элемент ассоциативного масива, как-то так:
Код AS3:
// Удаление объектов, массив assArr["myarray3"] обычный, не ассоциативный, по-этому можно(?) обратиться к length
for(var i:int; i < assArr["myarray3"].length; i++){
 
    for(var k:int; k < assArr["myarray3"][i].length; k++){
 
        for(var c:int; c < assArr["myarray3"][i][k].length; c++){
 
            assArr["myarray3"][i][k][c] = null;
 
        }
 
        assArr["myarray3"][i][k] = null;
    }
 
    assArr["myarray3"][i];
}
 
delete assArr["myarray3"];
Добавлено через 24 минуты
Вопрос на самом деле не совсем праздный, может лучше так?
Код AS3:
		public function nullArray3(arg1:Array):void {
			var i2, k2, c2;
			i2 = arg1.length -1;
			for (var i:int = i2; i >= 0; i--) {
				k2 = arg1[i].length - 1;
				for (var k:int = k2; k >= 0; k--) {
					c2 = arg[i][k].length - 1;
					for (var c:int = c2; c >= 0; c--) {
						arg1[i][k][c] = null;
					}
					arg1[i][k] = null;
				}
				arg1[i] = null;
			}
			arg1 = null;
		}
и обнулять лучше с последних элементов.

Старый 07.05.2013, 16:51
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Кольцевые ссылки GC прекрасно удаляет сам. Нет необходимости бегать по каждому вложенному элементу. Достаточно отрубить только корень и дерево свалится само.
__________________
тут я

Старый 07.05.2013, 16:59
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 10  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Пожалуйста, поконкретнее если можно, этого достаточно:
Код AS3:
delete assArr["myarray3"];
применительно к вышесказанному мною assArr["myarray3"] это arg1 в nullArray3(arg1:Array)...

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

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

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


 


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


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