gpt4 book ai didi

actionscript-3 - 在 ActionScript 3 中创建具有对象相等性的 "true"HashMap 实现

转载 作者:行者123 更新时间:2023-12-04 21:26:50 25 4
gpt4 key购买 nike

我一直在花一些空闲时间为 ActionScript 3 处理一组集合,但由于 ActionScript 3 处理字典对象内的相等检查的方式,我遇到了一个非常严重的障碍。

当您比较字典中的键时,ActionScript 使用 === 运算符来执行比较,这有一些令人讨厌的副作用,即只有对同一实例的引用才能解析 true 而不是相等的对象。这就是我的意思:

const jonny1 : Person = new Person("jonny", 26);
const jonny2 : Person = new Person("jonny", 26);

const table : Dictionary = new Dictionary();
table[jonny1] = "That's me";

trace(table[jonny1]) // traces: "That's me"
trace(table[jonny2]) // traces: undefined.

我试图解决这个问题的方法是提供一个 Equalizer 接口(interface),如下所示:
public interface Equalizer 
{
function equals(object : Object) : Boolean;
}

这允许执行 instanceOf-esq。每当我需要在我的集合中执行相等操作时检查(当对象没有实现均衡器时回退到 === 运算符);但是,这并没有解决我的底层数据结构(字典对象)对此一无所知的事实。

我目前解决该问题的方法是遍历字典中的所有键,并在我执行 containsKey() 或 get() 操作时执行相等性检查 - 但是,这几乎破坏了哈希图的整个要点(廉价的查找操作)。

如果我无法继续使用 Dictionary 实例作为 map 的支持,我将如何为作为键传入的唯一对象实例创建散列,以便我仍然可以保持相等性?

最佳答案

插入对象时如何计算对象的哈希码,然后通过支持字典中的哈希码查找它们?哈希码应该比较 === 就好了。当然,这将要求您为对象类型使用 Hashable 接口(interface)而不是 Equalizer 接口(interface),因此它的工作量并不比您已经在做的少,但是您确实可以获得廉价的查找。

关于actionscript-3 - 在 ActionScript 3 中创建具有对象相等性的 "true"HashMap 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1870770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com