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

swift - 我的字典的自定义哈希结构

我想构建一个可散列值用于我的字典键。它应该由一个包含两个字符串和一个 NSDate 的结构组成。我不确定我hashValue在下面正确构建了我的吸气剂:

0 投票
3 回答
3024 浏览

swift - Swift:具有字典属性的可散列结构

我在 Swift 中有一个如下所示的结构:

我现在需要使用 MapKey 作为 Swift 字典中的键,这需要 MapKey 符合 Hashable 协议。

对于像这样的结构,Hashable 的正确实现是什么?

我一直在做一些研究,但未能确定散列字典的正确方法是什么,因为我需要能够为values属性本身生成散列值。任何帮助深表感谢。

0 投票
1 回答
404 浏览

python - Python dict 的 __hash__ 和 __eq__ 评估的顺序是什么?

我试图了解 Python 字典必须在内部做什么才能找到一个键。在我看来,哈希将首先被评估,如果发生冲突,Python 将遍历键,直到找到eq返回 True 的键。这让我想知道为什么以下代码有效(测试代码仅用于理解内部):

字典不应该找不到正确的键(在#2和#4两种情况下都返回'o1'或'o2',或者抛出错误,取决于内部实现)。在这两种情况下,它如何能够在正确的键上着陆,而它永远不能正确地“等同”键(因为eq返回 False)。

我在散列方面看到的所有文档总是一起提到hasheq,从不cmpne等,这让我认为这两个是唯一在这种情况下发挥作用的文档。

0 投票
1 回答
320 浏览

swift - 未检测到超类中声明的 Swift 协议一致性

我有以下代码:

我收到一个编译时错误:在这一行中,类型“MyClass”不符合协议“Hashable”:

MyClass 扩展了 Realm 的类 Object,它扩展了 RLMObjectBase,它扩展了 NSObject。NSObject 符合 Hashable。它在扩展中声明。

为什么 MyClass 不符合 Hashable ,因为它的超类之一符合它?

此外,如果我像这样添加 Hashable :

然后错误消失了,但我的另一位同事,他在同一个项目上工作,得到一个编译时错误:

冗余协议一致性

此错误意味着子类声明符合已从超类继承的协议。

有谁明白这里发生了什么?

0 投票
1 回答
442 浏览

python - python中是否有任何可散列的内置对象是可变的?

好奇我们是否可以使用 hash() 来检查对象是否可变?

0 投票
0 回答
131 浏览

swift - 如何制作数组可散列?

我试图在 Swift 3 预览版 6 中Array<String>符合Hashable

但我收到以下错误,不知道为什么:

如何使数组可散列?

0 投票
1 回答
1003 浏览

python - Python:基于参数的单例

我正在关注这个链接并尝试制作一个单例类。但是,考虑参数(在启动类时传递),以便在参数相同时返回相同的对象。

dict因此,我不想将类名/类引用存储为键,而是将传递的参数作为键存储在dict. 但是,也可能存在不可散列的参数(例如dict,set本身)。

存储类参数和类对象映射的最佳方式是什么?这样我就可以返回一个与参数对应的对象。

不管怎么说,多谢拉。


EDIT-1:多一点解释。假设有如下课程

现在,A(1,2)应该总是返回相同的对象。但是,它应该不同于A(3,4)

我认为,这些论点在很大程度上定义了一个类的功能。假设班级是否要redis建立联系。我可能想创建 2 个以 diffredis主机作为参数的单例对象,但底层的类/代码可能很常见。

0 投票
2 回答
5145 浏览

ios - 创建表示可以打开或关闭的可散列对象的协议

我正在尝试创建一个简单的协议,说明对象是处于“开启”状态还是“关闭”状态。对它的解释取决于实现对象。对于 a UISwitch,它是开关是打开还是关闭(duh)。对于 a UIButton,可能是按钮是否处于selected状态。对于 a Car,它可能是汽车的引擎是否开启,或者即使它是否在移动。所以我开始创建这个简单的协议:

现在我可以像这样扩展上述 UI 控件:

现在我可以制作这些类型的对象数组并循环检查它们是打开还是关闭:

伟大的!现在我想制作一个将这些控件映射到 a 的字典,UILabel以便在控件更改状态时更改与控件关联的标签的文本。所以我去声明我的字典:

哦!正确的!傻我。好吧,那我就用协议组合来更新协议吧(毕竟我这里要使用的控件都是Hashable:UISwitch、UIButton等):

但是现在我得到了一组新的错误:

好的...所以我做了一些堆栈溢出挖掘和搜索。我发现许多看起来很有希望的文章,例如Swift 中的 Set 和协议,支持将某些协议用作符合另一个协议的具体类型,并且我发现那里有一些很棒的文章type erasure似乎正是我需要的: http://krakendev.io/blog/generic-protocols-and-their-shortcomings , http://robnapier.net/erasurehttps://realm.io/news/type-erased-wrappers-in-迅速/仅举几例。

这是我卡住的地方。我已经尝试通读所有这些内容,并且尝试创建一个将Hashable符合并且也符合我的OnOffRepresentable协议的类,但我不知道如何将它们全部连接起来。

0 投票
1 回答
498 浏览

swift - swift协议Hashable中hashValue的性能考虑

除了作为唯一整数之外,hashValue在 swiftHashable类型中选择 a 是否有任何性能考虑,可以插入到 a 中Set?例如,我选择的整数值的大小会影响后备数组的大小吗?即,如果我将 a hashValueof分配4000给一个Hashable类型并将其插入到 aSet中,那么后备数组是否需要至少4000是长度?

0 投票
2 回答
34468 浏览

python - Python:如何根据键的值对字典进行切片?

假设我有一个这样构建的字典:

d={0:1, 1:2, 2:3, 10:4, 11:5, 12:6, 100:7, 101:8, 102:9, 200:10, 201:11, 202:12}

并且我想通过以包含以下键的方式d1进行切片来创建子字典: . 最终输出应该是:dd10, 1, 2, 100, 101, 102

d1={0:1, 1:2, 2:3, 100:7, 101:8, 102:9}

鉴于我的真实字典包含超过 2,000,000 个项目,是否有一种有效的 Pythonic 方式来执行此操作?

我认为这个问题适用于键是整数的所有情况,当切片需要遵循某些不等式规则时,以及当最终结果需要将一堆切片放在同一个字典中时。