簡體   English   中英

flex字典錯誤?

[英]flex dictionary bug?

我正在AS3中測試HashMap實現

我嘗試了以下代碼:

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM