Форум Flasher.ru

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

Vishapakahr 12.10.2011 20:42

Vector как ассоциативный массив
 
Здравствуйте , питаюсь осуществить следующее

Код AS3:

package
{
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.text.TextField;
 
 
        public class vector_test extends Sprite
        {
 
                private var v:Vector.<String> = new <String>[];
                //private var v:Array = [];
                private var txt:TextField = new TextField();
                public function vector_test()
                {
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        stage.align = StageAlign.TOP;
 
                        txt.autoSize = 'left';
                        addChild(txt);
 
                        for(var i:int = 0;i<4;i++){
 
                                try{
                        v['b'+i] = 'bbb';
                                }catch(e:Error){
                                txt.appendText(e.message+'\n');
                                }
                        txt.appendText(v['b'+i]+'\n');
 
                        }
                        txt.y = 150;
                }
        }
}

Печатает Error #1056 , однако при

Код AS3:

private var v:Array = [];

Все нормально работает. В чем проблем с векторам ? как можно его осуществлять ?

-De- 12.10.2011 20:51

Скажите, а что вот эта строчка делает по вашему?
Код AS3:

v['b'+i] = 'bbb';

Что такое вектор (массив)? Что такое ассоциативный массив? Чем массив отличается от ассоциативного массива?

Vishapakahr 12.10.2011 20:56

Цитата:

Сообщение от -De- (Сообщение 1038718)
Скажите, а что вот эта строчка делает по вашему?
Код AS3:

v['b'+i] = 'bbb';

Что такое вектор (массив)? Что такое ассоциативный массив? Чем массив отличается от ассоциативного массива?

ассоциативный массив это кагда кагда можно вызовать элемент массива с помощью строки , а не ассоциативный кагда только с помощью индексов. Вектор , это тот же массив , толька тут можно задать тип элементов массива. Может неправильно с формулировал задачу ... Мне нужно делать ассоциативный массив где все элементы одного и того же типа. В компиляторе это удобно ибо показывает свойство типа при использовании. Как можно его делать ?

BezDelnik 12.10.2011 21:03

насколько я все это понимаю:

Array - индексированный массив. Индексы - int. Элементы - что угодно
Vector - индексированный массив. Индексы - int. Элементы - данные одного типа
Object - ассоциативный массив. Индексы - String. Элементы - что угодно
Diictionary - ассоциативный массив. Индексы - что угодно. Элементы - что угодно

GBee 12.10.2011 21:13

Надстройку над объектом.

Vishapakahr 12.10.2011 21:14

Цитата:

Сообщение от BezDelnik (Сообщение 1038727)
насколько я все это понимаю:

Array - индексированный массив. Индексы - int. Элементы - что угодно
Vector - индексированный массив. Индексы - int. Элементы - данные одного типа
Object - ассоциативный массив. Индексы - String. Элементы - что угодно
Diictionary - ассоциативный массив. Индексы - что угодно. Элементы - что угодно

Спасибо за Dictionary , незнал раньше :) нащет первого

Код AS3:

var a:Array = [];
                        a['something'] = 'element of something';
                        txt.appendText(a['something']+'\n');
 
                        txt.y = 150;

Это у меня печатает 'element of something' , а как получился что индекс взял как строка ?

Добавлено через 45 секунд
Цитата:

Сообщение от GBee (Сообщение 1038730)
Надстройку над объектом.

А как это делать ?

GBee 12.10.2011 21:26

Цитата:

А как это делать ?
Код AS3:

package
{
        public class Strings
        {
                private var _dict:Object = {};
                public function getString(key:String):String
                {
                        return _dict[key] as String
                }
 
                public function addString(key:String, value:String):void
                {
                        _dict[key] = value;
                }
        }
}


Vishapakahr 12.10.2011 21:28

А точно ! спасибо :)

-De- 12.10.2011 21:40

Цитата:

Сообщение от Vishapakahr (Сообщение 1038721)
ассоциативный массив это кагда кагда можно вызовать элемент массива с помощью строки , а не ассоциативный кагда только с помощью индексов.

Нет. Даже если попытаться как-то понять "вызовать элемент массива с помощью строки".
Лучше бы почитали про работу с массивами и что они такое. Может вызывать элементы перестали бы. И поняли чётко, что такое индекс.

Ассоциативный массив, где все элементы одного и того же типа (и это условие проверяется компилятором) на as3 сделать нельзя. Но GBee хороший вариант предложил.

Котяра 13.10.2011 00:33

Дело в том, что Array не "честный" массив, а Vector честный.
Array может выступать и в качесте хэшмапы, где ключом может быть и строка а не только uint.
Вместо
Код AS3:

v['b'+i] = 'bbb';

делайте
Код AS3:

v[i] = 'bbb';

или
Код AS3:

v.push('bbb');

И вы не совсем понимаете разницу между Dictionary и Object.
Использовать в качестве ключа в словаре строку - нонсенс.
Словарь нужен для использования в качестве ключа ссылочных объетов.
Для строк и неупорядоченных чисел - Object
Для упорядоченных наборов индексов - Array.
Я вообще предпочитаю установку значеий массива только через push - это позволяет избежать глупых ошибок с пропущенными индексами и превращения массива в объект (хэш)


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

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