2011-09-16 8 views
1

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

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* 

Мой вопрос заключается в следующем, как я могу изменить порядок positionsAC, чтобы гарантировать, что «роль» части каждого массива в правильном порядке (как это диктуется экипажем. Я пробовал пару разных циклов, но ничего не было близко.

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

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

В рамках проекта, есть переменный называется positionsAC, который имеет следующую структуру:

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* 

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

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

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

+0

Вы говорите, что ученикам присваивается аббревиатура позиции (например, EP или PR или WR или ...), и что есть только один ученик на позицию и порядок, в котором появляются аббревиатуры позиции, - это порядок вы хотели бы представить студентов? Так, например, если аббревиатура WR была первой в списке сокращений, студенты с позицией = WR будут перечислены первыми в списке ваших учеников? – Tim

+0

Да, это именно то, что я говорю. =) Я добавил немного больше информации к исходному сообщению, чтобы помочь сделать вещи более ясными. – Brds

ответ

0

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

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 добраться туда, куда мне нужно идти ... спасибо Владу, ты меня, где я нужен to be =)

1

Попробуйте эти петли:

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"); 
} 

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

+0

Я получаю сообщение об ошибке, вызванную следующей строкой кода: "positionAC.setItemAt (crewPositionsAC [item], i);" – Brds

+1

@Brds Извините, я случайно ударил кнопку SAVE. Я редактировал сообщение. –

+0

Ошибка «Свойство 2 не найдена в String и значение по умолчанию отсутствует». Исходя из строки с «if (currentPosition [2] == sourcePosition [2])« – Brds

Смежные вопросы