2012-01-05 2 views
0

루비에서 데이터 구조를 원한다면 문자열을 한 번만 저장하고 다음에 그것을 넣으려고 할 때 거부합니다 ('SET'과 같은 것). 구현이 가장 효율적이어야합니다 (예 : 배열의 선형 검색보다 좋음).고유 한 요소 만 저장하는 루비의 데이터 구조?

또한 목적을 위해 해시를 사용했지만 해시에 들어가는 동일한 값 (이 문자열을 일부 기존 문자열에서 가져 오는 문자열)이 여러 개인 문자열은 다른 해시 값처럼 계산됩니다.

가장 효율적이고 효율적인 방법은 무엇일까요? 나는 루비 보석을 사용하고 싶지 않다. 나는 내 자신의 코드 만 제출할 수있는 온라인 판사의 퍼즐 솔루션을 연구 중이다. 여기

내가 쓴 코드입니다 : 그것은해야하므로

for string in @string_store do 
    for c in 0...string.length 
    index_to_sum=0 
    while c+index_to_sum<string.length do 
     substring=string[c..(c+index_to_sum)]   
     unless @hash_store[substring]=='X' 
     @hash_store[substring]='X' 
     end 
     index_to_sum+=1 
    end 
    end 
end 
+0

사랑하는 Deathnote 사진, btw :) –

+0

Ahh thanks. Raito : –

+0

당신은 _ "에 대한 확신이 있습니까? 그러나 동일한 값을 가진 다중 문자열 (일부 기존 문자열에서 슬라이스 작업으로 얻는 문자열)이 해시에 들어갑니다"_? http://ideone.com/eIsMX –

답변

5

어떻게이 require 사용하지만 :)

require 'set' 
s1 = Set.new [1, 2]     # -> #<Set: {1, 2}> 
s2 = [1, 2].to_set     # -> #<Set: {1, 2}> 
s1 == s2        # -> true 
s1.add("foo")       # -> #<Set: {1, 2, "foo"}> 
s1.merge([2, 6])      # -> #<Set: {6, 1, 2, "foo"}> 
s1.subset? s2       # -> false 
s2.subset? s1       # -> true 

Ruby Set 약, 루비 세트 루비 표준 라이브러리의 일부입니다 코드 제출에 완벽하게 수용 가능

+0

Set DS에서도 같은 문제에 직면하고 있습니다. : | –

+0

http://pastebin.com/z6UdDhs2 –

0

물론 macek의 솔루션이 작동하지만 해시도 확실히 작동해야합니다. 고유 목록을 저장하기 위해 해시를 사용하는 것은 집합을 기본적으로 지원하지 않는 언어의 일반적인 관용구입니다. 중복 된 문자열로 문제를 재현하는 작은 코드 예제를 제공 할 수 있습니까? 나는 세트를 사용하여 변환 할 때 같은 문제가 발생할 수 있다고 생각합니다.

+0

코드 스 니펫을 추가했습니다. :) –

+0

@ Myth17 위의 코드에서'@hash_store.keys'를 호출하면 고유 한 목록을 얻어야합니다. 전화를 걸면 중복 키를 보았다고 말하는거야? – dbyrne

+0

예, 출력은 -> AA AAB AAB AB AB B B AAC AAC 교류 교류 C C –

관련 문제