2014-10-20 3 views
0

나는 사전에서 키로 사용하고자하는 정렬 된 점 집합 (x, y 쌍)을 가지고 있습니다.Julia의 문자열 SHA1

루비에 대한 나의 원래 접근 방식은 점의 문자열 표현을 얻은 다음 결과를 SHA1로 가져 오는 것이 었습니다.

줄리아에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

편집 :

내가 만들 열쇠는 점들의 집합이 아니라 집합 내의 개별 점이다.

고유 한 정수 값 집합을 만드는 프로세스가 있으며 이전에이 특정 집합을 발견했는지 확인하고 싶습니다. 또한이 특정 세트의 포인트에 대한 정보를 저장하려고합니다. 예를 들어이 설정을 몇 번이나 보았습니까?

점 집합의 길이는 20에서 180ish 사이에 다양합니다.

이러한 포인트의 문자열 표현의 SHA1 해시를 사용하면 포인트의 길이에 관계없이 내 키가 40 자 길이 될 것입니다.

실제로는 사전의 크기를 최대한 작게 유지하기 위해 SHA1을 사용하여 키를 압축합니다. 나는이 사전을 꽤 큰 크기로 키우고 싶다.

+0

x, y 쌍을 키로 직접 사용하지 않는 이유는 무엇입니까? – rickhg12hs

+0

원본 주석을 좀 더 명확하게 편집했습니다. 사전에 고유 한 순서쌍을 키로 사용하려고합니다. – koozdra

답변

2

포인트를 직접 사전의 키로 사용할 수 있습니다 (예 :

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

+0

감사합니다. 해시 기능은 내가 찾고있는 것입니다. – koozdra