Actionscript 3: переупорядочение коллекции массивов на основе другой иерархии коллекций массивов - PullRequest
1 голос
/ 16 сентября 2011

У меня есть массив, crewPositionsAC, который содержит список сокращений позиций - EP, PR, DR, WR и так далее. Эти позиции считываются через XML-файл каждый раз, когда загружается мое flex-приложение. Также заполняется из XML проект. В рамках проекта есть должности (студент, назначенный типу должности, указанному в crewPositionsAC). Эти позиции не обязательно находятся в правильном порядке иерархии, продиктованном crewPositionsAC. У меня есть все позиции в ArrayCollection (позицииAC) со следующей структурой:

positionsAC (arrayCollection)
    [0] = Array
        [0] = startOffset
        [1] = numDays
        [2] = role
        [3] = studentID
        [4] = conflict
        [5] = studentType
        [6] = showInPrinciple
        [7] = revisionNumber
    *continue until all positions are listed*

Мой вопрос заключается в следующем: как я могу изменить порядок позиций AC, чтобы гарантировать, что «ролевые» фрагменты каждого массива находятся в правильном порядке (как диктуется crewPositionsAC)? Я пробовал пару разных циклов, но ничего даже близко не подошло.

Редактировать

Итак, есть несколько проектов, в каждом проекте есть несколько позиций (обычно 16 или 17, но нет заданного номера.

Внутри проекта есть переменная с именемAC, которая имеет следующую структуру:

positionsAC:
    [0] (array)
        [0] = startOffset
        [1] = numDays
        [2] = role
        [3] = studentID
        [4] = conflict
        [5] = studentType
        [6] = showInPrinciple
        [7] = revisionNumber
    *continue until all positions are listed*

Затем пользователь может нажать кнопку, чтобы добавить другую позицию. При нажатии кнопки «Добавить члена экипажа» пользователю предоставляется список возможных позиций для добавления. В настоящее время я просто добавляю в массив AC еще один массив. Это приводит к тому, что недавно добавленный член экипажа находится в нижней части списка. Мне нужно занять позицииAC и изменить его порядок на основе [2] элемента (роли) на основе иерархии, определенной в crewPositionsAC. crewPositionsAC имеет следующую структуру:

crewPositionsAC:
    [0] = EP
    [1] = PR
    [2] = DR
    [3] = WR
    * continue until all possible position types are listed

Надеюсь, это немного поможет.

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

Попробуйте следующие циклы:

for (var i:int = 0; i < crewPositionsAC.length; i++)
{
    var sourcePosition:Object = crewPositionsAC.getItemAt(i);
    var actualPosition:Object = findActualPositionByRole(sourcePosition);
    positionsAC.setItemAt(actualPosition, i);
}

function findActualPositionByRole(sourcePosition):Object
{
    for (var i:int = 0; i < positionsAC.length; i++)
    {
        var currentPosition:Object = positionsAC.getItemAt(i);
        if (currentPosition[2] == sourcePosition[2])
            return currentPosition;
    }

    throw new Error("There's no matching item with the specified role");
}

Приведенный выше код должен работать в предположениях, которые @Tim пытается проверить.

0 голосов
/ 16 сентября 2011

Закончилось использованием следующего в качестве основы для достижения моей цели:

for (var i:int = 0; i < parentDocument.crewPositionsAC.length; i++)
{
    for (var j:int = 0; j < positionsAC.length; j++)
    {
        if (positionsAC[j][2] == parentDocument.crewPositionsAC.getItemAt(i))
            tempAC.addItem(positionsAC[j] as Array);
    }
}

оттуда я мог бы использовать tempAC, чтобы добраться туда, куда мне нужно было идти ... спасибо, влад, ты привел меня туда, где мне нужно было =)

...