问题标签 [hashable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
740 浏览

swift - Swift:为什么字典中的键类型必须是 Hashable 类型

如果我想为协议创建一个类型对象,则Dictionary<Key:Value>()它是必需的。为什么会这样,字典是如何实现的?KeyHashable

我的意思是我会理解,如果Key只是需要符合Equatable类型的协议,因为程序将不得不搜索相关的值,但是,var hashValue: Int随之而来的额外Hashable内容有点令人困惑

0 投票
1 回答
246 浏览

swift - 在 Swift 的同一个类中实现 Hashable 和 NSCoding

我在尝试在同一个 Swift 类(或结构)中采用 Hashable 和 NSCoding 协议时遇到问题。哈希性和编码/解码都独立工作。然而,一旦一个对象被 NSCoder 恢复,散列性就会丢失。

首先,我必须将其设为类而不是结构,因为显然 NSCoding 不适用于结构。因此,我显然需要从 NSObject 继承(它也恰好是 Hashable)。不幸的是,NSObject 的这种内置散列性似乎阻止了我以我想要的方式使我自己的类可散列(我认为。)

这是我的课:

我正在创建一组这些对象并对它们进行编码/解码,如下所示:

编码:

解码:

但后来我发现集合中的对象在解码时的哈希值与编码时的哈希值不同。所以我做了一个我认为有效的解决方法:

当我将它们打印出来时,这个“技巧”似乎纠正了散列值,但是对象仍然没有被正确散列(原因未知)。即当我这样做时:

如果我创建一个 TileMapCoords 对象,该对象与 itemsCollected 集中的对象具有相同的行和列,则“包含”方法会告诉我

1) 最初在集合中 2) 一旦集合已被 NSCoder 恢复/解码,则不在集合中

奇怪的是对象在集合中,我已经验证我的对象和集合中的对象都具有相同的哈希值,并且根据 == 运算符和 isEqual 方法相等。

我需要帮助解决这个问题或考虑另一种方法在同一个类中同时具有哈希性和 NSCodability(也许不覆盖 NSObject?)

0 投票
4 回答
3108 浏览

swift - swift4中hashable协议有什么用?

请解释使用可散列协议并在 swift 中实现。Apple 将 hashable 定义为“一种提供整数和哈希值的类型”。好的,但是什么是哈希值?

0 投票
1 回答
654 浏览

python - NLTK:TypeError:不可散列的类型:'list'

我正在遵循 bleu 评分的原始代码,如下所示:

并且代码工作正常。但我正在尝试通过将 csv 文件导入为以下代码来更改referenceand :candidate

但它遇到了一个错误:

然后,我从原始代码和修改后的代码中检查 and 的类型,它返回相同的reference类型candidatelist

我很困惑是什么让这些列表不同。

名单reference和“候选人”如下所示

0 投票
1 回答
28 浏览

swift - 独特的 MKAnnotations 集

所以我要做的是更新 a 上的注释mapview,但我想先将它们放入 Set 中,以便检查现有的、新的和已删除的注释。因此,我正在检查 Hashable 的protocol一致性

协议 'Hashable' 只能用作通用约束,因为它具有 Self 或关联的类型要求

关于如何做我想做的任何想法

0 投票
2 回答
92 浏览

arrays - 编码自定义对象的nsarray时不能使用Hashable

我有一个用于映射的自定义类,如下所示。

现在我将不同的模型对象添加到两个不同的数组中,如下所示,两个数组下面可能有一些共同的条目

现在我正在使用下面的代码在数组上方进行操作,效果很好

现在,当我尝试使用NSKeyedArchiver.archivedData. 它给了我如下错误

这是我将数组保存到的代码userdefaults

现在,如果我更改我的自定义映射模型UserSaved继承自NSCodingand NSObject。它可以工作,但是那个时候操纵数据是行不通的

所以一次,只有一件事有效。我想同时使用NSCodingwhile保存我的数组intersection并且subtracting应该可以工作

0 投票
1 回答
271 浏览

haskell - 这种处理哈希冲突的方法是新的/独特的吗?

在处理哈希映射时,我看到了一些处理哈希冲突的策略,但我们想出了一些不同的方法。我想知道这是否是新事物。

此版本的哈希映射仅在哈希和将被哈希的数据结构是可盐化的情况下才有效。hashable(在 Haskell 中就是这种情况,我们建议实施这种方法。)

这个想法是,不是在哈希映射的每个单元格中存储一个列表或数组,而是存储一个递归哈希映射。此递归哈希映射的唯一区别是您使用不同的盐。这样,哈希映射的一个级别上的哈希冲突很可能不是下一级的哈希冲突。结果,插入这样的哈希映射不再是 O(此哈希上的冲突数),而是 O(此上的冲突以递归方式发生的级别数),这很可能更好。

更详细的解释和实现可以在这里找到:

https://github.com/tibbe/unordered-containers/pull/217/files/58af4519ace34c5f7d3c1359907ff75e27b9cdb8#diff-ba23e0f18c79cb873ac5375367524cfaR114

0 投票
1 回答
84 浏览

swift - Set 的 contains 方法在不同的时间返回不同的值

我在考虑 Swift 如何确保 Set 的唯一性,因为我已经免费将我的一个 obj 从Equatable变成Hashable了,所以我想出了这个简单的 Playground

所以我的第一个问题是:

static func ==每当我在集合中插入新的 obj 时,都会调用该方法吗?

我的问题来自这个想法:

对于Equatableobj,为了做出这个决定,唯一能保证两个 obj 相同的方法就是询问 的结果static func ==

对于Hashableobj,一种更快的方法是比较hashValues... 但是,就像我的情况一样,默认实现将同时使用stringand number,与==逻辑相反。

因此,为了测试Set行为方式,我刚刚添加了一条打印语句。

我发现有时我得到了打印声明,有时没有。就像有时hashValue不足以做出这个决定......所以该方法并不是每次都被调用。奇怪的...

所以我尝试添加两个相等的对象,想知道结果会是什么set.contains

奇迹般的奇迹,在操场上启动了几次,我得到了不同的结果,这可能会导致不可预知的结果......添加

它消除了任何意想不到的结果,但我的疑问是:

为什么在没有自定义hashValue实现的情况下,==有时会被调用,有时却不会?苹果应该避免这种意想不到的行为吗?

返回假 返回真

0 投票
1 回答
215 浏览

c++ - 生成字符串束的标识号

假设你有一个被调用的结构体bundle,它由string对象组成。没有关于一个包将包含多少个字符串的准确信息,您需要为每个包生成标识号,以便区分它们。

例如,两个捆绑包有 5 个字符串对象,而这两个对象中只有四个是通用的。

注意 1:我需要一个识别号,因为在此过程中我遇到了很多捆绑包,其中一些具有完全相同的字符串。

注 2:我在 c++ 上工作,据我所知,c++ 中没有可散列或类似的东西。

How can we generate identification number ?

我想到的唯一解决方案是将字符串对象连接成一个包。我认为没有其他解决方案。也许以另一种格式或数据结构表示字符串可以更容易生成 id。

0 投票
0 回答
413 浏览

ios - 如何在 Swift 4.2 中为 UIViewController 生成 hashValue

我想知道是否可以在运行时使用 UIViewController 的 hashValue 来唯一标识 UIViewController 的实例。

我试图创建一个 UIViewController 并修改它的一些属性并且 hasValue 保持不变。似乎 hashValue 在运行时没有改变,但我想确定并且我没有在文档中找到“它是如何生成的”。

有谁知道它是否基于起始内存地址?hashValue 可以在运行时更改吗?