2013-09-22 2 views
1

이것은 최소/최대 값이 아닙니다!AS-3 - 최소/최대 색인 배열 길이

나는 0, 1, 2, 1000, -1, -100과 같은 모든 종류의 색인과 함께 Array을 사용합니다. 네, 네거티브 지수 ()이 기능이 마음에 들면 감사합니다. (). 문제는 내가 그 (것)들을 필요로한다 그렇지 않으면 나는 모든 품목을 이동해야 할 것입니다. 이제 -100과 같은 최소 인덱스를 어떻게 검색 할 수 있을지 궁금합니다. 최소 및 최대 색인 사이의 대부분의 요소는 undefined입니다.

var a: Array = new Array(); 
a[-100] = "hello"; 
a.forEach(...); // starts with 0 

최소 인덱스를 얻는 간단한 방법이 있습니까?

답변

2

아니요, 아니요, 부정적인 키의 최소 인덱스를 얻는 간단한 방법은 없습니다. 모든 키를 반복하고 번호로 변환하고 최저로 가져와야합니다.

그 이유는 배열을 배열과 객체로 모두 사용하기 때문입니다. 배열에는 양수 인덱스가있는 항목 만 있습니다. 음수 인덱스를 사용하여 항목을 할당하면 대신 배열의 항목이 아니라 배열 객체에 속성으로 추가됩니다.

메서드는 배열의 항목을 반복하므로 긍정적 인 인덱스에만 액세스합니다. 음수 인덱스를 사용하여 추가 한 데이터는 배열 항목이 아니며 배열 객체의 속성입니다. 따라서 forEach 메서드가 인덱스 0에서 시작하는 버그가 아닙니다.

배열에 저장 한 모든 항목을 반복하려면 해당 속성을 반복 할 수 있습니다. 그런 다음 개체 속성과 배열을 모두 가져옵니다. items :

for (i in a) { 
    // Here i is the key, and a[i] is the value 
} 
+0

좋아, 나에게 나쁜 소식과 좋은 소식이 들렸어. 나는 아직'객체 '의 모든 장점을 사용하지 않았다. 지금은 그렇게 할 시간입니다. – n4pgamer

1

AS3 배열에는 음수 인덱스를 사용할 수 있습니다. 문제는 (그리고 그것은 꽤 심각한 것입니다.) Array 메서드 중 어느 것도 음수 인덱스를 인식하지 못합니다. 즉, 정수만 인식합니다. 예를 들어

: 배열을

var my_array:Array = new Array(); 

var my_array[-100] = "hello"; 

trace(my_array[-100]) // hello 
trace(my_array.length) // 0 
trace(my_array) // [empty] 

따라서 표준은 반복 인덱스 절대 참조하여 행해질 수있다. 또는 반복 할 때 배열로 객체를 처리하면 다음과 같이됩니다.

var lowest:int = -100000 /* some deep number */ 

for(var i in a){ 

    if(int(i) < lowest){ 

    lowest = int(i); 

    } 
}