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

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

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

Регистрация: Oct 2013
Сообщений: 126
По умолчанию Переход с массивов на векторы

Часто встречав советы по использованию векторов вместо массивов для увеличения производительности решил перейти с массивов на векторы.
Заметил, что манипуляции с векторами, по сравнению с массивами, - это страшный геморрой:
Создать новый массив: var ar:Array=[]
Создать новый вектор: var v:Vector.<uint>=new Vector.<uint>();
Создать новый массив с заданными значениями элементов: var ar:Array=[1,2,3]
Создать новый вектор с заданными значениями элементов: var v:Vector.<uint>=new <uint>[1,2,3];

Ладно, с созданием можно смириться, код печатать пальцы не отсохнут, но перейдём к обнулению. Как замечательно и лакончино всё делается с массивом:
ar=[],
и в четыре раз длиннее код для вектора:
v=new Vector.<uint>(), при том, что меня терзают сомнения в том, что это лучший способ обнуления вектора.

Идею двумерных векторов я и подавно оставил - там, где, используя массив, можно было лакончино написать ar=[[],[],[]], для вектора приходится строчить целый роман!

Всё моё нытьё, видимо, с непривычки и от незнания, хотя почитал справку, форум, попробовал на практике. Поэтому посоветуйте, пожалуйста, есть ли способы такого же лаконичного объявления и обнуления векторов, как в случае с массивами?

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Присвоение нового массива это не обнуление.
Код AS3:
arr.length = 0;
Код AS3:
while(arr.length) arr.pop();
Вот варианты обнуления.

Я вам больше скажу - в вектор нельзя пихать разнородные данные, только однонтипные. Так что это совсем страшная штука, не надо их использовать
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
Присвоение нового массива это не обнуление.
Код AS3:
arr.length = 0;
я неточно выразился. мне нужно было обнуление старого и создание нового пустого массива, а это, как я понимаю, всё-таки arr=[]. Правда, я не знаю, куда при этом девается старый массив, я думал, что он как раз стирается. Буду признателен за пояснение этого нюанса.

Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
в вектор нельзя пихать разнородные данные, только однонтипные. Так что это совсем страшная штука, не надо их использовать
Насчёт этого я в курсе. Но массивов с разнородными данными у меня нет. Есть только двумерные массивы типа
Код AS3:
[[Object1,Objec2],[Object3,Objec4],[Object5,Objec6]]
, но для вектора это всё равно каша типа Vector.<Vector.<Object>> - с этим я голову ломаю до сих пор.

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Код AS3:
Vector.<Vector.<Object>>
С этим ломать голову не надо. Этого просто не нужно делать.
Вектор быстрее работает только с типизированными данными. Если пихать в него нетипизированный обжект то а в чем смысл?

Добавлено через 4 минуты
Цитата:
я не знаю, куда при этом девается старый массив
Если на него были другие ссылки - никуда не девается, висит в памяти. Если не было - удалится мусорщиком.
Так как вы показали в самом начале это не зануление массива, а зануление одной текущей ссылки.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 19.12.2013, 12:53
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 5  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
Если пихать в него не типизированный объект то а в чем смысл?
  • Вектор принадлежит к числу плотных массивов.
  • Вектор может иметь фиксированную длину

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

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

Старый 19.12.2013, 17:26
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 7  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
я тоже раньше думал, что вектор даст прирост производительности, но сейчас склоняюсь к ассоциативным + к классам с одними значениями.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
я тоже раньше думал, что вектор даст прирост производительности, но сейчас склоняюсь к ассоциативным + к классам с одними значениями.
Я раньше использовал вилку и нож, а сейчас склоняюсь к ложке + палочки.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 19.12.2013, 17:55
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 9  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Я раньше использовал вилку и нож, а сейчас склоняюсь к ложке + палочки.
Не понимаю к чему Вы это написали, но если Вы нож можете заменить палочками, то наверное Вы нинзя.
А ещё наверное забыли, что когда то, когда ещё не понимали разницы между массивом и вектором, пытались всё засунуть в массивы и использовать их везде. И вот если у ТС похожая проблема, то я и сказал, что тоже так думал, но это не так. Если я раньше думал, что в массивы нужно сувать всё, то теперь даже не знаю в каких случаях вектор даст прирост производительности. Наверное, если в него нужно положить миллион элементов, то тогда его стоит использовать.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Это я написал к тому, что вы сравниваете применимость теплого, мягкого и зеленого.
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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