Форум 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=171016)

Ookami 06.11.2011 22:09

Работа с двумерным массивом
 
Доброго времени суток. Помогите разобраться с массивом. Есть код, заполняющий матрицу числами от 1 до 3:

Код AS3:

public var board:Array = new Array();
 
private function genBoard():void {
        for (var i:int = 0; i < 16; i++) {
                for (var j:int = 0; j < 16; j++) {
                        board[i][j] = Math.floor(Math.random() * 3 + 1);
                }
        }
}

При присваивании значения board[i][j] FD ругается: [Fault] exception, information=TypeError: Error #1010: Термин не определен и не имеет свойств. Понимаю что неправильно объявляю массив, но не могу найти верного решения. Помогите пожалуйста.

expl 06.11.2011 22:13

Код AS3:

public var board:Array = new Array();
 
private function genBoard():void {
        for (var i:int = 0; i < 16; i++) {
                board[i] = new Array();
                for (var j:int = 0; j < 16; j++) {
                        board[i][j] = Math.floor(Math.random() * 3 + 1);
                }
        }
}


goodguy 06.11.2011 22:14

Цитата:

FD ругается: [Fault] exception, information=TypeError: Error #1010: Термин не определен и не имеет свойств. Понимаю что неправильно объявляю массив, но не могу найти верного решения
потому что на каждую позицию массива нужно сначала так же затолкать массив
Код AS3:

public var board:Array = []; // массив лучше создавать так: [], а не так: new Array()
 
private function genBoard():void {
        for (var i:int = 0; i < 16; i++) {
                      board[i] = []; // новый массив, для каждой ячейки
                for (var j:int = 0; j < 16; j++) {
                        board[i][j] = Math.floor(Math.random() * 3 + 1);
                }
        }
}


Ookami 06.11.2011 22:15

Оу, получается двумерным его сразу создать нельзя? Спасибо большое.

Добавлено через 41 секунду
А в чем разница между
Код AS3:

var board:Array = []

и
Код AS3:

var board:Array = new Array()


goodguy 06.11.2011 22:17

Конечно нельзя. Как он узнает, что должно быть в каждой его ячейке?

Ookami 06.11.2011 22:41

Ну раз уж зашла речь про массивы, то вдогонку еще пара вопросов.
1. На сайте адоба написано:
Цитата:

Не применяйте класс Array для создания массивов ассоциативных элементов (называемых также хэшами), которые представляют собой структуры данных, элементам которых присваиваются имена, а не числа. Чтобы создать массивы ассоциативных элементов, воспользуйтесь классом Object. Хотя ActionScript позволяет создавать массивы ассоциативных элементов с помощью класса Array, ни один из методов и свойств класса Array нельзя использовать с этими массивами.
Если все-таки использовать Array для ассоциативного массива, какие негативные последствия могут быть? Из работы с таким массивом предвидится только добавление элементов и последующее обращение к ним по имени.
2. Можно ли при инициализации массива жестко указать, какой тип данных будет в нем храниться?

etc 06.11.2011 22:44

Цитата:

Сообщение от Ookami (Сообщение 1044224)
Оу, получается двумерным его сразу создать нельзя? Спасибо большое.

Добавлено через 41 секунду
А в чем разница между
Код AS3:

var board:Array = []

и
Код AS3:

var board:Array = new Array()


В целом ни в чём, первая работает чуть быстрее, вторая более ООП-шная. Ну ещё краткая запись не умеет инициализировать массив заданного размера.

goodguy 06.11.2011 22:56

Цитата:

2. Можно ли при инициализации массива жестко указать, какой тип данных будет в нем храниться?
Нет. Но для этого и был создан Vector
Код AS3:

var array:Vector.<String> = new Vector.<String>(); // будет хранить строки

Цитата:

Из работы с таким массивом предвидится только добавление элементов и последующее обращение к ним по имени.
Object для этих целей удобнее

Ookami 06.11.2011 22:59

Спасибо за ответы, все понятно.

Wolsh 06.11.2011 23:03

Цитата:

Если все-таки использовать Array для ассоциативного массива, какие негативные последствия могут быть?
Во-первых, Вы получите избыточный объект, содержащий массу методов, ни один из которых не может быть использован в контексте ассоциативного массива. Лишний вес и память. Во-вторых, это грязь в коде и нарушение принципа наименьшего удивления))
Цитата:

2. Можно ли при инициализации массива жестко указать, какой тип данных будет в нем храниться?
Это класс Vector.<T>, типизированный массив.


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

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