在 Haxe 中使用对象作为 Map 键

2024-01-10

我正在尝试做一个Map以一个对象作为键。问题是,当我尝试从这张地图中获取元素时,我总是得到null。这是因为我没有提供与密钥完全相同的参考。我正在提供一个具有相同的对象values,所以参考不同。

有什么办法可以解决吗?我可以让它使用某种equals()功能?

class PointInt
{
    public var x:Int;
    public var y:Int;

    ...
}
var map = new Map<PointInt, Hex>();

var a = new PointInt(1, 1);
var b = new PointInt(1, 1);

var hex_a = new Hex();

map[a] = hex_a;
var hex_b = map[b];

/// hex_b == null now because reference(a) == reference(b)

正如所解释的here https://stackoverflow.com/questions/23706464/haxe-3-map-only-retrieves-null and here https://groups.google.com/forum/#!msg/haxelang/F9Ovh7KS6rs/ENuF8qtb-GgJ, Map在 Haxe 中,使用对象的引用作为键。

你想用的是HashMap https://api.haxe.org/haxe/ds/HashMap.html像这样 (try.haxe 链接 https://try.haxe.org/#d5D63):

import haxe.ds.HashMap;

class Test {
    static function main() {

        var map = new HashMap();
        map.set(new PointInt(1, 1), 1);

        trace(map.get(new PointInt(1,1)));
    }
}

class PointInt
{
    public var x:Int;
    public var y:Int;

    public function new(x:Int, y:Int)
    {
        this.x = x;
        this.y = y;
    }

    public function hashCode():Int
    {
        return x + 1000*y; //of course don't use this, but a real hashing function
    }

    public function toString()
    {
        return '($x,$y)';
    }
}

除了使用之外,您还需要在代码中更改什么haxe.ds.HashMap代替Map是要实施一个hashCode : Void->Int关键对象中的函数

由于您使用的对象有 2 个 int,并且哈希映射只有 1 个 int,因此会发生 2PointInt将具有相同的哈希码。为了解决这个问题,您可以创建一个使用字符串作为哈希码的哈希映射,但如果您可以编写(或谷歌)一个好的哈希函数,您将获得更好的性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Haxe 中使用对象作为 Map 键 的相关文章

  • Haxe: class, object, new and constructor

    haxe 类 对象 new 和 构造函数 package if neko import neko Lib import neko io File end class Thing public function new trace new f
  • Haxe 在 PHP 环境中部署的 Web“框架”?

    最近我一直在看Haxe 构建要部署到运行 PHP 的 Apache 的应用程序 好吧 虽然它看起来可能适合我的需求 部署到 PHP 但不使用糟糕的语言 但我还没有发现任何东西可以使实际应用程序开发比构建传统的非 MVC PHP 应用程序更容
  • FlashDevelop、Haxe 导入 CreateJS?

    我刚刚开始尝试 Haxe 制作一个网络应用程序 我想使用 CreateJS 它有一个 Haxe extern lib 东西 我使用 FlashDevelop 作为我的 IDE 所以我在FlashDevelop中创建了一个新的Haxe JS项
  • 通用构建枚举的一些错误

    Solved对于第一个宏来说 编写这并不是最容易的 但我学到了很多东西 感谢 Gama11 为我指明了正确的方向 以及创造如此美丽事物的核心团队 Haxe And I even added some slick doc field stri
  • Haxe 中的常量

    如何在 Haxe 中创建公共常量 我只需要旧的模拟const in AS3 public class Hello public static const HEY String hey 在 Haxe 中声明常量的常用方法是使用static a
  • FlashDevelop Haxe (Flash) 调试器

    FlashDevelop中有Haxe的调试器吗 FlashDevelop 现在附带一个运行良好的 Haxe 调试器 仅限 Flash 目标
  • 在 Haxe 中传递任意函数参数列表

    在 ActionScript 中我可以使用 在函数声明中 因此它接受任意参数 function foo args void trace args length 然后我可以调用传递数组的函数 foo apply this argsArray
  • 使用 Haxe 将参数传递给延迟函数

    你知道是否有一种简单的方法可以将一些参数传递给通过调用的函数 haxe Timer delay func delay 我所说的 简单 是指无需创建任何自定义计时器 您可以使用bind https haxe org manual lf fun
  • 如何在 FDT 内导航/更新 Haxe SDK?

    在 OSX 上 FDT 在此处提供 Haxe SDK Applications FDT 5 app Contents FDT5 haxe haxe 2 09 osx 因为它位于 OSX 包内部 所以我无法导航到它 我如何 在首选项中选择它
  • Haxe——像 ActionScript 一样嵌入文件?

    在 ActionScript 中 您可以执行以下操作 Embed source src myfile xml mimeType application octet stream private var xml Class 它会嵌入您的文件以
  • 错误:失败并出现错误:没有这样的项目:polymod

    我正在尝试制作一个 Friday Night Funkin mod 但是当我编译它时 出现以下错误 Error Could not find haxelib polymod does it need to be installed 所以我当
  • 在 Haxe/OpenFL 应用程序中使用 SWF 动画

    尽管 Haxe 在 NME OpenFL 方面取得了巨大成就 但从 AS3 开发过渡的最大问题是资产 尽管 Haxe 与 as3 很相似 而且 OpenFL 试图提供熟悉的 API 但缺乏 SWF 支持吓跑了许多开发人员 我对此主题的研究使
  • 迭代器(不是迭代器)上的 Lambda 迭代

    我经常读到在迭代器上调用 Lambda 函数是不可能的 直到现在我也一直抱着这样的信念 然而 阅读 Franco Ponticelli 和 Lee McColl Sylvester 所著的 Professional Haxe 一书 了解如何
  • Haxe 自定义元数据到宏调用

    假设我已经创建了一个可以像这样使用的构建宏 build macros SampleMacro build arg class Main 是否可以将其转换为自定义的速记元数据 samplemacro arg class Main 有这方面的文
  • Haxe + Webpack 导出空对象

    我正在尝试在 Haxe 编译器导出的 JS 上运行 webpack dev server 我正在使用 hxgenjs 库将 haxe 输出拆分为单独的模块 并尝试通过 webpack 合并它们 以使用热模块替换功能 一切似乎都正常 但输出是
  • Haxe 编译器可以将任何 C# 代码转换为 Haxe 吗?

    首先 我对 Haxe 非常陌生 所以我在这里问超级菜鸟问题 我有两个问题 1 我的第一个问题是我知道Haxe编译器可以从Haxe转换为任何其他语言 支持 但是它可以将其他语言 支持 的源代码转换为Haxe吗 2 如果它能做到这一点 它的能力
  • Haxe 中参数的数量可变

    我正在寻找一种在 Haxe 中做这样的事情的方法 function foo args for arg in args 这里有人可以帮助我吗 这个问题很老了 所以 我以文档的形式回答 Haxe 从 4 2 开始支持剩余参数 function
  • 使用Haxe宏进行条件编译,而不是#if #end

    假设我们有一个 Local 类 class Local static inline public var logLevel Int 3 以及一些功能 Tool debug s String compiled if logLevel gt 0
  • Haxe 摘要 - 使用 @:from 时可以隐式转换数组吗?

    我试图将一种类型的数组视为另一种 抽象 类型的数组 当我使用抽象的基础类型时 它工作得很好 但是当我尝试使用另一种类型 使用定义的 from关键字 我构建失败 如果我使用显式的 它会起作用cast 但我想知道 有什么办法可以解决这个问题 我
  • 问号运算符“?”的含义Haxe 中的参数之前

    这两个函数签名有什么区别 function f i Int 0 function f i Int 0 参数是否带有前缀似乎没有任何区别 两者都编译良好 确实没有理由使用 在这个例子中 但是有一个区别 On a 静态类型目标 https ha

随机推荐