使用对象作为哈希键的最有效方法
Most efficient way to use an object as a hash key
我有一种情况,我会从函数缓存的使用中受益匪浅 (memoization)。
但是,我的函数采用单个参数,其值非常大且多维Array
。
进行缓存的标准方法(也是我能想到的唯一方法)是在函数本身上创建一个 cache
属性(cache
是一个散列) .函数的每个 运行,您可以检查 myFunc.cache[arg]
是否存在,如果该值存在,则只需 return 即可,否则您将正常执行计算并将参数添加为 [=之后 cache
的 32=]。
但是,javascript 似乎不会在您创建它们时尝试评估用作散列键的字符串,而总是将它们视为字符串。 example
我可以将 JSON.stringify
应用于参数,但由于数组很大且嵌套,我想知道是否有更有效的方法来识别唯一参数。
这个问题基本上是我在不知情的情况下问的:
JavaScript Hashmap Equivalent
就我而言,最简单的解决方案就是手动将数组的第 0 个索引设为一个 ID,我可以将其用作哈希键。
如果没有这样做或类似的方法,您必须创建自己的哈希图(在链接问题中概述)或等待官方 Map
对象实现。
我有一种情况,我会从函数缓存的使用中受益匪浅 (memoization)。
但是,我的函数采用单个参数,其值非常大且多维Array
。
进行缓存的标准方法(也是我能想到的唯一方法)是在函数本身上创建一个 cache
属性(cache
是一个散列) .函数的每个 运行,您可以检查 myFunc.cache[arg]
是否存在,如果该值存在,则只需 return 即可,否则您将正常执行计算并将参数添加为 [=之后 cache
的 32=]。
但是,javascript 似乎不会在您创建它们时尝试评估用作散列键的字符串,而总是将它们视为字符串。 example
我可以将 JSON.stringify
应用于参数,但由于数组很大且嵌套,我想知道是否有更有效的方法来识别唯一参数。
这个问题基本上是我在不知情的情况下问的:
JavaScript Hashmap Equivalent
就我而言,最简单的解决方案就是手动将数组的第 0 个索引设为一个 ID,我可以将其用作哈希键。
如果没有这样做或类似的方法,您必须创建自己的哈希图(在链接问题中概述)或等待官方 Map
对象实现。