[英]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.