Julia中的字符串SHA1
问题描述:
我有一组有序的点(x,y对),我想用它作为字典中的键。Julia中的字符串SHA1
我在ruby中的原始方法是获得点的字符串表示,然后得到SHA1结果。
在Julia中完成此操作的最佳方法是什么?
编辑:
,我要创建的关键是点的集合,而不是集中的单个点。
我有一个过程,创建一组独特的整数点,我想看看我是否遇到过这一组特定的点。我也想存储一些关于这个特定点的信息。例如,我看过多少次这种配置。
点集的长度在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
这(使用可变密钥)是朱莉娅完全正常的(虽然当然,如果你更改了字典的键,当然会发生不好的事情)。
为什么不直接使用x,y对作为键? – rickhg12hs 2014-10-20 10:18:41
我编辑了原始评论,使其更清晰一些。我期待在字典中使用一组唯一有序对作为关键字。 – koozdra 2014-10-20 17:54:18