Julia中的字符串SHA1
我有一组有序的点(x,y对),我想用作字典中的键 我在ruby中最初的方法是获取点的字符串表示,然后对结果进行SHA1 在朱莉娅身上实现这一点的最佳方式是什么 编辑: 我要创建的关键点是点集,而不是集中的各个点 我有一个创建一组唯一整数点的过程,我想看看我以前是否遇到过这组特殊的点。我还想存储一些关于这组特定点的信息。例如,我见过多少次这种配置 点集的长度在20到180英寸之间变化 对于这些点的字符串表示形式的SHA1散列,我知道无论点的长度如何,我的密钥都将是40个字符长Julia中的字符串SHA1,julia,Julia,我有一组有序的点(x,y对),我想用作字典中的键 我在ruby中最初的方法是获取点的字符串表示,然后对结果进行SHA1 在朱莉娅身上实现这一点的最佳方式是什么 编辑: 我要创建的关键点是点集,而不是集中的各个点 我有一个创建一组唯一整数点的过程,我想看看我以前是否遇到过这组特殊的点。我还想存储一些关于这组特定点的信息。例如,我见过多少次这种配置 点集的长度在20到180英寸之间变化 对于这些点的字符串表示形式的SHA1散列,我知道无论点的长度如何,我的密钥都将是40个字符长 实际上,我正在使用S
实际上,我正在使用SHA1压缩我的密钥,以使字典的大小尽可能小。我想把这本字典扩大到一个相当大的尺寸。你可以直接用它们作为字典的键,例如
points = [(rand(),rand()) for i in 1:100]
a_dict = [p => rand(1:10000) for p in points]
@show points[1]
@show a_dict[points[1]]
产生
points[1] => (0.4374267407775083,0.32232663537074036)
a_dict[points[1]] => 4102
编辑:问题是询问点列表,而不是单对。很难从你的问题中分辨出来,但是如果你想抛出点列表,那么我只需要使用hash
函数,这就是字典所使用的:
julia> x = [(rand(),rand()) for i in 1:100];
julia> y = copy(x);
julia> z = [(rand(),rand()) for i in 1:100];
julia> hash(x)
0x2dd258e3af0ec93a
julia> hash(y)
0x2dd258e3af0ec93a
julia> hash(z)
0x6449b750e42e6bc6
julia> some_dict = [hash(x) => 1, hash(z) => 1]
Dict{Uint64,Int64} with 2 entries:
0x6449b750e42e6bc6 => 1
0x2dd258e3af0ec93a => 1
julia> if hash(y) in keys(some_dict)
some_dict[hash(y)] += 1
else
some_dict[hash(y)] = 1
end
julia> some_dict
Dict{Uint64,Int64} with 2 entries:
0x6449b750e42e6bc6 => 1
0x2dd258e3af0ec93a => 2
如果您确实需要检索点集,那么您可以直接使用字典,将点集作为键,即
julia> other_dict = [x=>1,z=>1]
Dict{Array{(Float64,Float64),1},Int64} with 2 entries:
[(0.6453074757765922,0.0958215… => 1
[(0.5283378708792779,0.8418390… => 1
julia> other_dict[y] += 1
2
julia> other_dict
Dict{Array{(Float64,Float64),1},Int64} with 2 entries:
[(0.6453074757765922,0.0958215… => 1
[(0.5283378708792779,0.8418390… => 2
这(使用可变键)在Julia中非常好(当然,如果你在添加了字典的键后更改它们,会发生不好的事情)。为什么不直接使用x,y对作为键呢?我编辑了原始注释以使其更清晰。我希望使用一组唯一的有序对作为字典中的键。我编辑了原始注释以使其更清晰。我想使用一组有序对作为密钥,而不是有序对本身。谢谢。哈希函数正是我想要的。