해시 테이블/사전을 사용하여 작업 할 때 가끔 키 지정 방법에 어려움이 있습니다.해시 테이블 또는 사전 키 이름 저장 위치
예를 들어: 나는 키 값 (다른 모듈에서) (이 예를 들어 파이썬을 사용하여) 간단한 사전,
foo = {'bar': 'baz', 'foobar': 'foobaz' }
I 값에 액세스 할 수 있습니다 만들 경우 : (foo['bar']
를) 및 baz
다시 얻을.
Dr. Evil의 말처럼 "정말 표준입니다."
키에 정적 문자열을 사용하면이 사전을 사용하여 모든 모듈을 구현과 밀접하게 연결할 수 있습니다. 물론 다른 키 유형 (예 : 열거 형, 객체 등)을 사용할 때도 적용 할 수 있습니다. 어쨌든 당신이 그것을 슬라이스, 사전에 액세스하는 모든 모듈은 키 값을 알고 있어야합니다.
이 문제를 해결하기 위해 일반적으로 정적 상수 문자열 값 (또는 언어에서 사용 가능한 경우 Enum)을 키에 사용하고 로컬 클래스/모듈 또는 별도의 모듈/클래스에 공개적으로 저장합니다. 따라서 사전 키 자체의 변경 사항은 단일 위치에 유지됩니다.
이 일반적으로 다음과 같습니다 : 같은 사전의 사용이 반드시 부부 모듈/클래스를한다는 것을 구현에 키를 지정 거기에 더 나은 방법
BAR_KEY = 'bar'
foo[BAR_KEY] = 'foobar'
있습니까?
참고 : SO에서 이에 대한 몇 가지 응답을 보았습니다 (예 : property-to-reference-a-key-value-pair-in-a-dictionary). 주제가이 문제를 구체적으로 다루지 않는 것으로 보입니다. 대답은 도움이되었지만 폭 넓은 경험을 원합니다.
좋은 점, 키가 항상 알려져 있고 상수 인 경우 속성이있는 클래스/구조체에 배치하는 것이 좋습니다. – CodingWithSpike
글쎄, 나는 보통 그렇게 할 때 사전은 여러 (3 +) 모듈에 의해 사용됩니다. 그러나 한 모듈에서 다른 모듈로 간단한 사전을 전달하는 중이라면 과장된 부분이 아닌 것 같습니까? 결국 많은 재산 클래스로 끝날 수도 있습니다 :) – bedwyr
@ bedwyr, 분명히 파이썬에 대한 과용은 아닙니다 (Jensen의 답변 참조). 구조가 정의되기 때문에, 이해하기가 훨씬 쉬워집니다. (물론, 당신은 동적 타입의 언어로 그것을 뒤죽박죽 수 있습니다 ...) – strager