[英]flex dictionary bug?
我嘗試了以下代碼:
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");
然后我調用了clear()方法:
map.clear();
哈希圖的大小沒有變為0,而是為1。問題在於,當鍵為“ 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 );
}
}
如果再次調用clear()函數,則剩余的鍵將被刪除:
if (size() != 0)
{
clear();
}
有誰知道y鍵沒有被刪除的原因是什么?
我還沒有時間在tamarin(用於閃存的VM)中查看Dictionary
實現,但是當值由line map[ key ] = undefined;
影響到map時,字典正在蜂擁而至map[ key ] = undefined;
在remove
功能中。
在IE中,您使用一組鍵開始迭代,但是隨后重新哈希,並且鍵不再有效,並且VM無法找到先前的鍵,因此在這種情況下會丟失y鍵。
您可以做的就是刪除map[key] = undefined
; 從remove
功能,它應該工作。 奇怪的是,刪除操作沒有產生任何類似的錯誤...
要顯示已經進行了重新哈希處理,請參見此處的實時示例: http : //wonderfl.net/c/2PZT
當您為字典分配一個值時,您會看到一個鍵重復兩次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.