Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Переход с массивов на векторы (http://www.flasher.ru/forum/showthread.php?t=205743)

a7s1h1 19.12.2013 12:04

Переход с массивов на векторы
 
Часто встречав советы по использованию векторов вместо массивов для увеличения производительности решил перейти с массивов на векторы.
Заметил, что манипуляции с векторами, по сравнению с массивами, - это страшный геморрой:
Создать новый массив: 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=[[],[],[]], для вектора приходится строчить целый роман!

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

Dukobpa3 19.12.2013 12:18

Присвоение нового массива это не обнуление.
Код AS3:

arr.length = 0;

Код AS3:

while(arr.length) arr.pop();

Вот варианты обнуления.

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

a7s1h1 19.12.2013 12:32

Цитата:

Сообщение от Dukobpa3 (Сообщение 1155442)
Присвоение нового массива это не обнуление.
Код AS3:

arr.length = 0;


я неточно выразился. мне нужно было обнуление старого и создание нового пустого массива, а это, как я понимаю, всё-таки arr=[]. Правда, я не знаю, куда при этом девается старый массив, я думал, что он как раз стирается. Буду признателен за пояснение этого нюанса.

Цитата:

Сообщение от Dukobpa3 (Сообщение 1155442)
в вектор нельзя пихать разнородные данные, только однонтипные. Так что это совсем страшная штука, не надо их использовать ;)

Насчёт этого я в курсе. Но массивов с разнородными данными у меня нет. Есть только двумерные массивы типа
Код AS3:

[[Object1,Objec2],[Object3,Objec4],[Object5,Objec6]]

, но для вектора это всё равно каша типа Vector.<Vector.<Object>> - с этим я голову ломаю до сих пор.

Dukobpa3 19.12.2013 12:34

Код AS3:

Vector.<Vector.<Object>>

С этим ломать голову не надо. Этого просто не нужно делать.
Вектор быстрее работает только с типизированными данными. Если пихать в него нетипизированный обжект то а в чем смысл?

Добавлено через 4 минуты
Цитата:

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

toFL 19.12.2013 12:53

Цитата:

Если пихать в него не типизированный объект то а в чем смысл?
  • Вектор принадлежит к числу плотных массивов.
  • Вектор может иметь фиксированную длину

Psycho Tiger 19.12.2013 17:08

Не задуряйтесь. Вектор не даст Вам той производительности, о которой Вы думаете. Пишите код так, чтобы Вам хорошо было. Вам же с ним работать.

Akopalipsis 19.12.2013 17:26

я тоже раньше думал, что вектор даст прирост производительности, но сейчас склоняюсь к ассоциативным + к классам с одними значениями.

alatar 19.12.2013 17:40

Цитата:

я тоже раньше думал, что вектор даст прирост производительности, но сейчас склоняюсь к ассоциативным + к классам с одними значениями.
Я раньше использовал вилку и нож, а сейчас склоняюсь к ложке + палочки.

Akopalipsis 19.12.2013 17:55

Цитата:

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

alatar 19.12.2013 18:22

Это я написал к тому, что вы сравниваете применимость теплого, мягкого и зеленого.


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

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