刚入门Julia
,最近需要对自定义的结构体计算hash
值,因为用的并不都是immutable
类型的结构体,为了正确理解和计算hash
,在这里向大家请教一些问题 :
- 对
mutable
和immutable
类型结构体做hash
计算区别有什么? - 对数值向量或者矩阵是怎么做
hash
计算的,为啥对大型矩阵hash
计算也那么快? - 如果向量元素是
mutable
类型的结构体呢? - 根据特定内容计算唯一值,除了
hash()
还有什么其它方式么?
在此先感谢大家了
刚入门Julia
,最近需要对自定义的结构体计算hash
值,因为用的并不都是immutable
类型的结构体,为了正确理解和计算hash
,在这里向大家请教一些问题 :
mutable
和immutable
类型结构体做hash
计算区别有什么?hash
计算的,为啥对大型矩阵hash
计算也那么快?mutable
类型的结构体呢?hash()
还有什么其它方式么?在此先感谢大家了
个人认为,hash
和是不是可变的没什么关系,具体还是取决于对应类型的hash
是怎么定义的。AbstractArray
的hash
定义在这里. 对于小数组,就是逐个元素hash
,但是对于大数组有一个复杂度log(N)
的算法。只要你的类型是AbstractArray
并且不重载hash
的情况下,不管是否可变,都是上面那个方法。
比如StaticArrays
里面的SArray
和MArray
有一样的hash
:
julia> hash(SVector(1, 2, 3)) # immutable
0x902ea5284b019f89
julia> hash(MVector(1, 2, 3)) # mutable
0x902ea5284b019f89