Я пытаюсь получить доступ к отдельной плитке внутри моего двумерного массива плиток. Я создал свой массив следующим образом:
private var map:Array = [[25,25]];
Ive пробовал несколько способов, в том числе:
map[1][1] = 1;
Все, что он делает, это дает мне это:
ReferenceError: Error #1056: Cannot create property 1 on Number.
Ive тоже пробовал:
map[[1,1]] = 1;
Ничего не происходит, что я могу сказать
Единственный способ, который я пробовал до сих пор, дает мне результат, не являющийся ошибкой:
map[1,1] = 1;
Проблема здесь в том, что это выбирает всю строку. Любая помощь будет оценена по достоинству .. спасибо!
2 ответа
Это неправильный способ создания 2D-массива:
private var map:Array = [[25,25]];
Этот массив содержит один массив, содержащий два элемента. Ко второму элементу нельзя обращаться так:
map[1][1] = 1;
Потому что второй элемент (массив) map
не существует.
Вы можете создать 2D-массив следующим образом:
var map:Array = [];
for (var i:int = 0; i < rows; i++)
{
map[i] = [];// this line adds new row to the 2D array
// To fill the array by zeros add next loop
for (var j:int = 0; j < cols; j++)
{
map[i][j] = 0;
}
}
Для начала я думаю, что для получения ошибки, упомянутой в вашем вопросе, ваш массив должен выглядеть так:
var map:Array = [
[25, 25], // map[0] = [25, 25] ( array of two elements )
35 // map[1] = 35 ( just a simple number )
];
Итак, если вы напишете:
trace(typeof map[1]); // gives : number
Вы получите: number
, и поэтому вы не можете правильно: map[1][1] = value;
, и это нормально, что вы получили ошибку #1056
.
Я не знаю, имели ли вы в виду присвоить значение 1
второму 25
из map[0]
или действительно хотите добавить или отредактировать map[1][1]
в первом случае, вы можете просто написать:
map[0][1] = 1; // gives : map[0] = [25, 1]
Во втором случае вы можете:
map[1] = [any_other_value, 1]; // gives : map[1] = [any_other_value, 1]
Последнее замечание, забудьте, что вы получили ошибку, и предположите, что ваш массив map
был просто:
var map:Array = [
[25, 25]
];
Здесь также нельзя писать map[1][1] = value;
, почему? Воспользуемся тем же методом:
trace(map[1]); // gives : undefined
Поэтому убедитесь, что вы не можете добавить свойство в undefined
, поэтому, когда вы пишете:
map[1][1] = value;
Вы получите ошибку #1010
: «undefined не имеет свойств.».
Конечно, здесь мы должны сначала создать map[1]
:
map[1] = []; // or directly map[1] = [any_other_value, value]
А потом :
map[1][1] = value;
Надеюсь, это поможет.
Похожие вопросы
Новые вопросы
arrays
Массив - это упорядоченная линейная структура данных, состоящая из набора элементов (значений, переменных или ссылок), каждый из которых идентифицируется одним или несколькими индексами. Когда вы спрашиваете о конкретных вариантах массивов, используйте вместо них следующие связанные теги: [vector], [arraylist], [matrix]. При использовании этого тега в вопросе, относящемся к языку программирования, пометьте вопрос используемым языком программирования.