hashmap - 使用新的但相同值的键通过对象键访问 Haxe map

标签 hashmap equality haxe

标题有点乱。但让我解释一下我的问题。

让我们假设有一个名为 MyObj 的类。此 MyObj 有一个 hashCode() 函数,该函数生成一个 Int 哈希码以与 Haxe 映射一起作为键使用。像这样:

var mymap = new Map<MyObj,String>();
var myobj = new MyObj(my,params);
mymap[myobj] = "whatever";
trace(mymap[myobj]); // works great and can print "whatever" from map

上面的效果很好。然而;当映射到具有相同参数的新对象时,它不起作用。

trace(mymap[new MyObj(my,params)]); // does not work, returns null

当打印出并检查整个映射 (trace(mymap)) 时,似乎每个用作键的"new"对象实际上都是一个新的“id”或“哈希码”( Haxe 在幕后做了什么)。

我什至在 MyObj(可以是抽象类型)中重载了等号运算符。

问题是,如上所述,如何使用包含相同值的不同对象从 map 中检索元素。

如何实现这样的功能:

mymap[new MyObj(my,params)]

最佳答案

提供@theRemix 答案的替代方案:您可能需要考虑使用 polygonal-ds图书馆。它通过其 HashTableHashable 接口(interface)支持您的需求。这是一个简单的用法示例:

import de.polygonal.ds.HashTable;
import de.polygonal.ds.Hashable;

class Main {
    public static function main() {
        var table = new HashTable<MyObj, String>(16);
        table.set(new MyObj(5), "FirstObject");
        table.set(new MyObj(2), "SecondObject");

        trace(table.get(new MyObj(5))); // "FirstObject"
        trace(table.get(new MyObj(0))); // null
    }
}

class MyObj implements Hashable {
    public var key(default, null):Int;

    public function new(key:Int) {
        this.key = key;
    }
}

有一个缺点:HashTable是一个类,不是抽象的,所以它不支持数组访问。

关于hashmap - 使用新的但相同值的键通过对象键访问 Haxe map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42055993/

相关文章:

c# - 多个变量之间的相等比较

encoding - 在 Haxe 中使用 sys.io.File.read 读取文件时指定文件编码

Haxe 编译生成的 JavaScript 代码

json - 关于 JSON 的哈希到底是什么?

scala map 通过键获取值,键不区分大小写

C# 字符串相等运算符返回 false,但我很确定它应该是 true...什么?

JavaScript 数组比较奇怪的行为

iphone - Haxe 可以为 iOS 原生方法创建库吗?

java - 如何找到 HashMap 中某些条目的最高值而不是整个 HashMap?

Ruby——将散列解压缩到参数列表中