2011-09-16 2 views
1

위치 축약 목록 (EP, PR, DR, WR 등)이 포함 된 crewPositionsAC 배열이 있습니다. 이러한 위치는 Flex 어플리케이션이로드 될 때마다 XML 파일을 통해 읽혀집니다. 또한 XML에서 채워지는 것은 프로젝트입니다. 프로젝트 내에서 위치 (crewPositionsAC 내에 나열된 유형의 직위에 배정 된 학생)가 있습니다. 이 위치는 반드시 crewPositionsAC에 의해 지정된 올바른 계층 구조 순서가 아닙니다.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 각 배열의 "역할"조각 (올바른 순서에 있는지 확인하기 위해 순서를 변경할 수 있습니다 : 나는 다음과 같은 구조를 가진 ArrayCollection에 (positionsAC) 내의 모든 위치를 crewPositionsAC가 지시 한대로)? 루프를 위해 몇 가지 다른 시도했지만, 아무것도 가까이왔다.

편집

그래서, 여러 프로젝트는 각 프로젝트 내에서 여러 위치 (보통 16 또는 17가 있지만 설정 번호가 없다,있다. 프로젝트 내에서

이 변수가

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* 

그런 다음, 사용자가 다른 위치를 추가하는 버튼을 클릭 할 수있는 "대원 회원 추가"버튼을 누르면, 사용자가 제공됩니다 재치 :. positionsAC라는 다음과 같은 구조를 가지고 그 h 추가 할 수있는 위치 목록. 현재, 위치 배열에 다른 배열을 추가하기 만하면됩니다. 이로 인해 최근 추가 된 승무원이 목록 맨 아래에 놓이게됩니다. 나는 positionsAC을 가져 와서 crewPositionsAC에 정의 된 계층 구조에 기반한 [2] 항목 (역할)에 따라 순서를 바꿔야합니다. 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을 사용할 수 있습니다, 당신은 저를 얻었다 =)

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

다음 코드 줄에서 오류가 발생합니다. "positionsAC.setItemAt (crewPositionsAC [item], i);" – Brds

+1

@Brds 죄송합니다. 실수로 SAVE 버튼을 눌렀습니다. 게시물을 수정했습니다. –

+0

"문자열에서 속성 2를 찾을 수없고 기본값이 없습니다."라는 오류가 발생했습니다. "if (currentPosition [2] == sourcePosition [2])" – Brds