Julia中的字符串SHA1

问题描述:

我有一组有序的点(x,y对),我想用它作为字典中的键。Julia中的字符串SHA1

我在ruby中的原始方法是获得点的字符串表示,然后得到SHA1结果。

在Julia中完成此操作的最佳方法是什么?

编辑:

,我要创建的关键是点的集合,而不是集中的单个点。

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

点集的长度在20和180之间变化。

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

实际上,我使用SHA1来压缩我的密钥,以使我的字典的大小尽可能小。我希望这本词典能够增长到相当大的规模。

+0

为什么不直接使用x,y对作为键? – rickhg12hs 2014-10-20 10:18:41

+0

我编辑了原始评论,使其更清晰一些。我期待在字典中使用一组唯一有序对作为关键字。 – koozdra 2014-10-20 17:54:18

您可以直接使用它们直接指向字典的键,例如,

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 

这(使用可变密钥)是朱莉娅完全正常的(虽然当然,如果你更改了字典的键,当然会发生不好的事情)。

+0

我编辑原始评论更清晰。我想用一组有序对作为关键,而不是有序对本身。 – koozdra 2014-10-20 17:57:13

+0

谢谢。哈希函数正是我正在寻找的。 – koozdra 2014-10-20 18:49:35