Julia中的字符串SHA1

Julia中的字符串SHA1,julia,Julia,我有一组有序的点(x,y对),我想用作字典中的键 我在ruby中最初的方法是获取点的字符串表示,然后对结果进行SHA1 在朱莉娅身上实现这一点的最佳方式是什么 编辑: 我要创建的关键点是点集,而不是集中的各个点 我有一个创建一组唯一整数点的过程,我想看看我以前是否遇到过这组特殊的点。我还想存储一些关于这组特定点的信息。例如,我见过多少次这种配置 点集的长度在20到180英寸之间变化 对于这些点的字符串表示形式的SHA1散列,我知道无论点的长度如何,我的密钥都将是40个字符长 实际上,我正在使用S

我有一组有序的点(x,y对),我想用作字典中的键

我在ruby中最初的方法是获取点的字符串表示,然后对结果进行SHA1

在朱莉娅身上实现这一点的最佳方式是什么

编辑:

我要创建的关键点是点集,而不是集中的各个点

我有一个创建一组唯一整数点的过程,我想看看我以前是否遇到过这组特殊的点。我还想存储一些关于这组特定点的信息。例如,我见过多少次这种配置

点集的长度在20到180英寸之间变化

对于这些点的字符串表示形式的SHA1散列,我知道无论点的长度如何,我的密钥都将是40个字符长


实际上,我正在使用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对作为键呢?我编辑了原始注释以使其更清晰。我希望使用一组唯一的有序对作为字典中的键。我编辑了原始注释以使其更清晰。我想使用一组有序对作为密钥,而不是有序对本身。谢谢。哈希函数正是我想要的。