ActionScript: как передать многомерный массив, а затем извлечь только одну «строку» - PullRequest
0 голосов
/ 21 января 2010

Я читаю набор координат широты и долготы, которые определяют область многоугольника. Они привязаны к идентификатору области, и я извлекаю их из базы данных SQL. Так, например, идентификатор области 153 может иметь 20 координат, а идентификатор области 77 может иметь 11 координат. Я хочу сохранить их в двумерном массиве, индексированном по идентификатору области, где каждая пара координат объединяется в один объект Google LatLng. Позже я хочу получить только одну строку, то есть набор координат для одной области, и отправить их в функцию, которая принимает массив координат и рисует многоугольник на карте. Вот что у меня есть:

private var coordsFromSql:ArrayCollection = new ArrayCollection();

var polyArray:Array = new Array();

for each(var item:COORDINATES in coordsFromSql)
{
    // add coordinates to the array for each Area id                
    polyArray[item.AREA_ID].push( new LatLng(item.LATITUDE, item.LONGITUDE) );
}

Так вот, где возникает первая проблема. Я не знаю, как добавить переменное число новых элементов в двумерный массив в известный индекс. то есть, рассматривая polyArray как двумерную электронную таблицу, как, например, добавить значения в 'row' 77, то есть polyArray [77]? Если я запускаю приведенный выше код, я получаю ошибку времени выполнения # 1010 «Термин не определен и не имеет свойств»

Вторая часть вопроса - как извлечь одну «строку» в качестве нового массива? Используя приведенный выше пример для вызова функции drawPolygon, могу ли я сделать это?

var polyArraySlice:Array = polyArray[77].slice();                   
drawPolygon(color,  polyArraySlice );                   

1 Ответ

2 голосов
/ 21 января 2010

Похоже, ваш код загрузки близок, но не совсем. В вашем цикле for вы делаете:

polyArray[item.AREA_ID].push(/*...*/)

но вы никогда ничего не помещаете в массив там.

Так что ваш груз, вероятно, будет примерно таким:

var polyArray:Array = []

for each(var item:COORDINATES in coordsFromSql)
{
    // add coordinates to the array for each Area id                
    var id:Number = item.AREA_ID;
    if(polyArray[id] == null) { polyArray[id] = [] }
    polyArray[id].push( new LatLng(item.LATITUDE, item.LONGITUDE) );
}

Получение копии одного из отдельных мест будет работать так же, как у вас:

var polyArraySlice:Array = polyArray[77].slice();                   
drawPolygon(color,  polyArraySlice );         
...