繁体   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