问题标签 [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 回答
225 浏览

swift - 斯威夫特 1.2::0:错误:'[设置]' 不能转换为 'Hashable'

我使用 xCode 6.3 的转换器将我的项目转换为 swift 1.2,之后我仍然有很多错误,但我手动修复了它们。

现在,当我编译时,我得到:
<unknown>:0: error: '[Set<T>]' is not convertible to 'Hashable'

我使用 Set 的唯一地方是:

我曾尝试清理项目并尝试删除 DerivedData 文件夹,但这并没有帮助。

我已经搜索过,但我找不到有同样问题的人。
有谁知道如何解决这个问题?

0 投票
1 回答
335 浏览

swift - nil is not convertible to hashable.

I have a custom control that is using a datasource to fetch items (as an NSTableView would do). The datasource can return Any-type, as long as it's hashable. The items are used as a key in a private dictionary.

The control (custom view) is added to the UI in interface builder.

I run into problems when I am querying the datasource with a nil parameter because nil is not convertible to hashable.

What is the proper way to do this?

}

0 投票
2 回答
4300 浏览

python - 使列表可变且可散列

一个可散列的对象需要一个__hash__方法,并且它有一个在其生命周期内永远不会改变的散列值。

由于我完全忽略的原因,Python 列表不可散列,我想知道以下实现是否正常,或者它是否有一些我不知道的故障。

所以这是一个可散列的列表实现,它几乎可以毫无问题地工作,我不明白为什么一个列表在正常的 Python 发行版中不能是可散列的,即使它仍然是可变的。

注意:这个问题不是关于为什么不能将列表用作字典键的任何解释?

0 投票
4 回答
3886 浏览

swift - 如何在 Swift 中处理字典的哈希冲突

TLDR

我的自定义结构实现了Hashable Protocol。但是,当在 a 中插入键时发生哈希冲突时Dictionary,不会自动处理它们。我该如何克服这个问题?

背景

我之前曾问过这个问题 How to implement the Hashable Protocol in Swift for an Int array (a custom string struct)。后来我添加了自己的答案,这似乎有效。

但是,最近我hashValue在使用Dictionary.

最基本的例子

我已尽可能将代码简化为以下示例。

自定义结构

请注意重载相等运算符 (==) 的全局函数,以符合Hashable 协议所要求的 Equatable Protocol 。

微妙的字典关键问题

如果我创建一个DictionarywithMyStructure作为键

相等的哈希值会导致collision1键被键覆盖collision2。没有警告。如果这样的冲突在有 100 个键的字典中只发生一次,那么它很容易被遗漏。(我花了很长时间才注意到这个问题。)

字典文字的明显问题

但是,如果我用字典文字重复这一点,问题就会变得更加明显,因为抛出了一个致命错误。

问题

我的印象是没有必要hashValue总是返回一个唯一的值。例如,马特汤普森说

关于实现自定义散列函数的最常见误解之一来自......认为散列值必须是不同的。

受人尊敬的 SO 用户@Gaffa 说,处理哈希冲突的一种方法是

考虑哈希码是非唯一的,并对实际数据使用相等比较器来确定唯一性。

在我看来,快速哈希协议哈希函数是否需要返回唯一值?在撰写本文时尚未得到充分回答。

阅读 SwiftDictionary问题后如何处理哈希冲突?,我假设 Swift 会自动处理与Dictionary. 但如果我使用自定义类或结构,显然情况并非如此。

这个评论让我觉得答案在于 Equatable 协议是如何实现的,但我不确定我应该如何改变它。

是为每个字典键查找调用此函数还是仅在存在哈希冲突时调用此函数?(更新:看到这个问题

当(且仅当)发生哈希冲突时,我应该怎么做才能确定唯一性?

0 投票
3 回答
1933 浏览

swift - Dictionary 如何在 Swift 中使用 Equatable 协议?

为了解决这个问题,我一直在玩一个实现哈希协议的自定义结构。我试图查看等效运算符重载(==)被调用多少次,具体取决于填充Dictionary.

更新

@matt写了一个更简洁的自定义结构示例,它实现了 Hashable 协议并显示了调用频率hashValue==调用频率。我在下面复制他的代码。要查看我的原始示例,请查看编辑历史记录

这会产生结果:

由于 Hashable 使用 Equatable 来区分哈希冲突(我无论如何都假设),我希望func ==()只在存在哈希冲突时被调用。但是,在上面的@matt 示例中根本没有哈希冲突,但==仍在调用。在我的其他强制哈希冲突的实验中(参见这个问题的编辑历史),==似乎被称为随机次数。

这里发生了什么?

0 投票
1 回答
12967 浏览

python - 如何解决 TypeError: unhashable type 'list'

我有两个列表,我想修改第一个列表的特定内容并发送输出,但是当我尝试修改它时,出现错误 TypeError: unhashable type: 'list'。我正在将 python 与 mongodb 一起使用。

这两个列表是

所需的输出是

我在这里犯了什么错误?

谁能指导我如何获得所需的输出。

0 投票
2 回答
26890 浏览

python - 使用 union 将字典添加到`set()`

我刚刚遇到了一些我想问的有趣的事情。

将字典添加到 aset中,我曾假设该字典将作为完整字典添加,但事实并非如此。仅添加键:

当您尝试使用它添加它时set.add(),会出现错误:

显然,这种行为与列表非常不同:

在文档中,它说集合是可散列对象的无序集合,这是对上述一些问题的暗示。

问题

这里发生了什么?集合项必须是可散列的,所以很明显,这与为什么我只用 将键添加到集合中.union(),但为什么用.add()?

列表中集合的行为差异背后是否存在一些可用性原因?

Python(或库)中是否存在本质上类似于列表但仅保留唯一项的数据类型?

0 投票
1 回答
593 浏览

swift - Swift:如何制作我的自定义结构节点符合Hashable?

Node 是一个泛型类型。

但是当我尝试以下操作时它不起作用:

编译器抱怨Node<String>不符合 Hashable。如何使Node<String>符合 Hashable?

0 投票
1 回答
1211 浏览

xcode - 元类型(.Type)可以用作字典中的键吗?

我有这样的事情:

在我的size字典定义中,我从 Xcode 编辑器中得到了这个实时错误:

类型“AnyObject.Type”不符合协议“Hashable”

我如何完成我想做的事情size?也就是说,如何创建将类型链接到其特定大小字典的字典?

我认为这ObjectIdentifier会对我有所帮助,Hashable但我不知道如何使用它,或者它是否是正确的选择。

0 投票
2 回答
130 浏览

arrays - 如何从具有重复范围的数组中获取具有唯一范围的数组?

我可以从具有重复数字的数组中获取一组唯一数字

我需要一个具有唯一范围的数组

从具有重复范围的数组中,例如这样。

我不能对 Set 使用相同的方法,因为默认情况下只有 String、Int、Double 和 Bool 是可散列的。如何使范围可散列以能够使用上述方法?