에 연결 C99 + SDL 게임에서 사운드 효과 (SDL_mixer 청크 데이터와 몇 가지 추가 플래그 및 파일 이름 문자열)가 포함 된 배열을 가지고 있으며 "sounds [2]와 같은 색인에서 참조됩니다. 데이터".파일 이름 또는 레이블을 숫자 인덱스
나는 파일 이름으로 소리를 불러 낼 수 있기를 원하지만, 일치하는 것이 발견 될 때까지 모든 배열을 strcmp하고 싶지는 않다. 이렇게하면 더 많은 사운드를 추가하거나 순서를 변경하거나 플레이어가 정의한 사운드 모드를 허용 할 수 있으므로 공통 식별자 (예 : "SHOT01"또는 "EXPL04")를 사용하여 호출 할 수 있습니다.
가장 빠른 방법은 무엇입니까? 나는 해싱에 대해 들었는데, 이는 루아의 문자열 색인 (table [ "field"]과 같은)과 비슷한 결과를 낳 겠지만 주제에 대해서는 아무 것도 모른다. 꽤 복잡해 보인다.
중요한 점을 감안할 때 파일 이름이나 레이블의 크기는 모두 6 자 이상 8 자 이하 여야합니다 (예 : "SHOT01.wav").
요약하면 짧은 문자열을 해시하는 방법에 대해 배울 수 있습니까? 아니면 음향 효과와 같은 것을 추적하는 가장 빠른 방법이 될 수 있으므로 임의의 레이블이나 식별자를 사용하여 호출 할 수 있습니까?
생각이납니다. 원하는 해시 형식 (예 : 16 비트 배열의 [65535])의 크기 (멤버)의 배열을 가져와 해시 함수를 사용하여 모든 레이블의 인덱스를 가져와야합니다. 맞습니까? 내 문자열이 ascii 전용 (및 모든 대문자) 값으로 제한되는 경우를 조사하는 좋은 알고리즘은 무엇입니까? 해당 문자 세트로 16 비트 해시를 사용할 수 있습니까? 장기적으로 볼 때 공간은 조금은 걱정거리입니다. –
이상적으로 저장되는 예상 요소 수만큼 큰 저장 컨테이너 (어레이)를 원할 수도 있습니다. 12 개의 소리 만 들려면 8에서 16 사이의 크기이면 충분합니다. 해싱 함수에 관해서 ... 모든 ASCII 문자를 정수로 합치면 8 또는 16보다 훨씬 큰 숫자로 끝날 것이므로 계수를 사용합니다. 'index = sum % 16;'은'sum'을'16'으로 나눈 나머지 값을 인덱스로 가져 오므로 항상'16'보다 작은 숫자가됩니다. – Mrafcho001
종합적인 설명 주셔서 감사합니다. 번스타인 해싱과 링크 된 목록 "버킷"을 사용하여 성공적으로 썼습니다. 완벽하게 작동하는 것 같습니다! –