问题标签 [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 投票
2 回答
1482 浏览

swift - 是否可以在 Swift 中使用 Type 作为字典键?

我正在制作一个农场,所有可以种植的东西都符合 Growable 协议。当你种植植物时,你调用这个函数:

myFarm.planting<T: Growable>(qty: Int, of: T.Type) -> Farm

现在我希望 Farm 的每个实例都有一个字典实例 var,例如:

var crops = [Growable.Type: Int]

问题是,即使我让 Growable 协议继承了 Hashable,这也无助于 Growable类型变成 Hashable。

换句话说,即使我像这样向 Growable 添加扩展:

... Growable类型仍然不是 Hashable,因为 Hashable 协议只涉及类型的实例,而不涉及类型本身。

好吧,通常我会放弃并说,“我很愚蠢,不要再尝试这个了。”

然而这是 Swift,所以我认为必须有一种方法可以让语言符合我的意愿,无论是通过创建一个新的 StaticHashable 协议,然后使用接受此协议的新下标方法扩展 Dictionary 类型,还是通过修改 Swift 的源代码本身和然后向进化列表提出建议。

但在我走上这两条路之前,我认为明智的做法是问问各位天才,是否已经有一种方法可以做我想做的事,或者这样做是否非常愚蠢,你会向我展示我以前的明显优越的方法一直以某种方式错过了令人难以置信的愚蠢。

注意:我的观点是类型本身应该能够静态地遵守其功能未声明为静态的协议,因为消息的发送者为什么要关心响应的实体是不朽的上帝还是短暂的生物,在某些神的形象?

0 投票
2 回答
8486 浏览

python-3.x - 如何使包含 numpy 数组的元组可散列?

使 numpy 数组可散列的一种方法是将其设置为只读。这在过去对我有用。但是当我在一个元组中使用这样一个 numpy 数组时,整个元组不再是可散列的,我不明白。这是我放在一起来说明问题的示例代码:

首先,我创建一个简单的 numpy 数组并将其设置为只读。然后我将它添加到一个元组并检查它是否仍然是只读的(它是)。

当我想将元组用作字典中的键时,出现错误TypeError: unhashable type: 'numpy.ndarray'

这是我的示例代码的输出:

我可以做些什么来使我的元组可散列,为什么 Python 首先会显示这种行为?

0 投票
1 回答
5062 浏览

dictionary - map[gorm.DB]struct{}{} 给出了无效的映射键类型 gorm.DB

我想创建一个在我的应用程序中使用的“一组”gorm 类型。所以我想定义一个map我的类型gorm.DB作为键和空structs{}作为标志:

但是编译器不允许我这样做时出现错误:invalid map key type gorm.DB. 我可以使用指向gorm.DBs 的指针来欺骗它,例如:

但这不是一个解决方案,因为我需要使它独一无二,如果我的地图被填满,就像db.AutoMigrate(&Chat{})我可以得到许多具有不同地址的类似对象一样。

另一种解决方案是制作一片gorm.DB

但是我必须手动过滤添加元素,这看起来有点疯狂。

0 投票
2 回答
1043 浏览

swift - 在这种情况下,我无法理解字典中的快速语言问号运算符 transitions[prev]?[transition]

我在互联网上的很多地方和社区中进行了搜索,以找出这种编程语法到底发生了什么。

我正在拼命地寻求此代码中的指导。

在这些特定声明中编译器发生了什么?

这就是类的声明方式

这是变量

这些是例子:

  1. 第一种情况 - 过渡中发生了什么[prev]?[transition]

    /li>
  2. 第二种情况 - return transitions[state]?[transition] != nil 中发生了什么

    /li>

这就是我想了解的全部。在这些时刻发生了什么?

0 投票
2 回答
166 浏览

python - Efficiently mapping unhashable objects to their index in a list

A Python list

may be seen as an efficient representation of a mapping from [0, 1, ..., len(f) - 1] to the set of its elements. By "efficient" I mean that f[i] returns the element associated with i in O(1) time.

The inverse mapping may be defined as follows:

This works, but Inverse(f)[x] takes O(n) time on average.

Alternatively, one may use a dict:

This has O(1) average time complexity, but it requires the objects in the list to be hashable.

Is there a way to define an inverse mapping that provides equality-based lookups, in O(1) average time, with unhashable objects?

Edit: sample input and expected output:

0 投票
2 回答
421 浏览

python - 对 Python 集添加相同对象两次感到困惑

如果我将一个整数添加到 Python 集合对象两次,Python 只会添加一次。

但是,在我的应用程序中,我正在尝试将协程添加到集合中,因为我找不到更好的方法来跟踪哪些协程已经在 event_loop 中。我对以下行为感到惊讶:

我不确定我在这里做了什么。如果协程对象不可散列,我是否认为它不会被添加到集合中?所以它是可散列的,对吧?

那么如果它是可散列的,为什么我们会得到两个具有相同方法/参数的不同散列?

0 投票
1 回答
52 浏览

swift - Swift 如何存储和检索集合类型

访问 Set 元素很快,而且 Set 类型必须是可散列的。

我认为 Swift 只存储每个元素的散列值,但我发现原始值(未散列)也可以访问。例如像这样:

输出:

swift如何将Set类型存储在内存中并访问它?

0 投票
0 回答
111 浏览

python - 什么是用于管理配置参数的好可散列 python 类字典对象?

为了缓存函数(现在我正在使用klepto),我将一个配置对象传递cfg给函数,只有在cfg更改时才计算返回值。

  • 因此,cfg必须是可散列的,并且hash(cfg1) == hash(cfg2)if cfg1 == cfg2
  • 我也很想通过点符号访问配置参数,例如cfg.para1.
  • 嵌套条目会很好,但是一个级别就足够了,我可以接受dict并且listcfg.

我想做这样的事情:

第一次尝试

使用Box()python-box 中的对象,由常规(嵌套)python dict 初始化cfg_dic

第二次尝试

Make OrderedDictsfromdic和它的条目(在把它变成元组的元组之后,..)在初始化之前是Box这样的:

第三次尝试

放弃box并使 dict 可散列。

更新第四次尝试

我还尝试将cfg Box()作为带有排序键的 json-string 传递:

所有这些都失败了,因为(例如,在重新启动 IPython 内核之后),尽管条目相同,但哈希值却不同。

我愿意接受任何建议,非常感谢!

0 投票
1 回答
49 浏览

python - 为什么在该可散列对象的集合中找不到我的可散列对象,该集合是另一个对象的属性?

我在两个类的对象之间有递归关系:Foo有一个对象(在其属性中),每个都有一个对象(在其属性中)。我已经实现如下 MWE 所示,但测试失败。为什么?setBarbarsBarlistFoofoos

根据Python Glossary, aset只能包含hashable对象和hashable对象:

一个对象是hashable如果它有一个在其生命周期内永远不会改变的哈希值(它需要一个__hash__()方法),并且可以与其他对象进行比较(它需要一个__eq__()方法)。

我真的不知道我下面的 MWE 是否满足对象具有永远不会更改的哈希,因为哈希取决于列表中的其他对象并设置属性。有没有办法解决这个问题?

最小的工作示例:

我使用 CPython,Python 3.6.x。

0 投票
0 回答
333 浏览

swift - Swift Hashable:错误无法执行命令被杀死 9

我有一个大型数据模型,其中对象需要可散列以进行比较。为此,我向它们添加了 hashValue getter,如下所示:

如果模型对象具有太多属性,我将它们按上述方式分解。这很顺利,直到我用同样的方法覆盖了更多的模型类。现在大约。10 个可散列的模型类编译时间从 1 分钟变为 10 分钟,之后编译完全失败并出现以下错误:

我能做些什么来防止这种情况发生?我正在使用 Swift 4 和 Xcode 9.2。