2012-01-19 3 views
1

나는 HashMap implementation in AS3을 테스트 중이었습니다.flex 사전 버그?

map.clear(); 

해시 맵의 크기가 0이되지 않았다, 그러나 그것은 1 :

var map:IMap = new HashMap(); 
map.put("a", "value A"); 
map.put("b", "value B"); 
map.put("c", "value C"); 
map.put("x", "value X"); 
map.put("y", "value Y"); 
map.put("z", "value Z"); 

그런 다음 나는 분명히() 메소드를 호출 :

나는 다음 코드를 시도했습니다. 문제는 키가 "y"이면 제거되지 않는다는 것입니다.

protected var map:Dictionary = null; 

public function HashMap(useWeakReferences:Boolean = true) 
{ 
    map = new Dictionary(useWeakReferences); 
} 

public function put(key:*, value:*) : void 
{ 
    map[key] = value; 
} 

public function remove(key:*) : void 
{ 
    map[ key ] = undefined; 
    delete map[ key ]; 
} 

public function clear() : void 
{ 
    for (var key:* in map) 
    { 
     remove(key); 
    } 
} 

내가 다시 맑은() 함수를 호출하면 나머지 키가 제거됩니다 :

if (size() != 0) 
{ 
    clear(); 
} 

사람이 이유를 '은 y 키 아무튼 무엇을 알고 있나요 다음과 같이 대응하는 코드는 삭제 되나요?

답변

3

나는 타마린 (플래시에 대한 VM)의 Dictionary 구현 볼 수있는 시간이 없었어요,하지만 값이 remove에 선 map[ key ] = undefined;하여지도에 reaffected 때 사전이 재탕에 beeing 것 같다 기능.

I.E. 당신은 키 세트로 반복을 시작하지만 다시 해쉬가 발생하고 키가 더 이상 유효하지 않으며 VM이 이전 키를 찾을 수 없으므로이 경우 y 키를 놓치십시오.

map[key] = undefined을 제거하면됩니다. remove 기능에서 작동해야합니다. http://wonderfl.net/c/2PZT

당신은 키가 두 번 때 반복하는 것을 볼 수 있습니다 : 어떤 이상한 것은

은 재탕 여기에 라이브 예제를 참조하십시오 발생한 것을 보여주기 위해 ... 삭제가 유사한 버그를 생성하지 않은 것입니다 사전에 값을 지정합니다.