문제

해시 테이블/사전으로 작업 할 때 때때로 키를 지정하는 방법에 어려움을 겪고 있습니다.

예를 들어 : 간단한 사전을 만들면 (이 예제에 Python 사용),

foo = {'bar': 'baz', 'foobar': 'foobaz' }

키 값으로 값 (다른 모듈)에 액세스 할 수 있습니다.foo['bar']) 그리고 얻다 baz 뒤.

Dr. Evil의 말에 따르면, "정말 표준입니다."

불행히도, 키에 정적 문자열을 사용하면이 사전을 사용하여 모든 모듈을 구현하기 위해 단단히 연결합니다. 물론 이것은 다른 주요 유형 (예 : 열거, 물체 등)을 사용할 때도 적용될 수 있습니다. 어쨌든 사전에 액세스하는 모든 모듈은 키의 값을 알아야합니다.

이를 해결하기 위해 일반적으로 키에 대한 정적 상수 문자열 값 (또는 언어로 사용 가능한 경우 열거)을 사용하고 로컬 클래스/모듈 또는 별도의 모듈/클래스에 공개적으로 저장합니다. 따라서 사전 키 자체의 변경 사항은 단일 위치에 보관됩니다.

이것은 일반적으로 다음과 같습니다.

BAR_KEY = 'bar'
foo[BAR_KEY] = 'foobar'

사전을 사용하는 것이 반드시 모듈/클래스를 구현에 결합시키는 것은 아니라고 키를 지정하는 더 좋은 방법이 있습니까?

참고 : 나는 이것을 해결하는 몇 가지 응답을 보았습니다 (예 : 부동산-참조-키-키-값-쌍-소설), 그러나 주제는이 문제를 구체적으로 다루지 않는 것 같습니다. 답은 도움이되었지만 더 넓은 경험을 원합니다.

도움이 되었습니까?

해결책

속성 만 포함하는 수업을하지 않겠습니까? 이것은 Python (내가 아는 것에서)과 잘 어울리고 다른 언어와도 잘 작동합니다. 리팩토링은 오늘날의 도구와 함께 사소한 것입니다.

다른 팁

객체를 통과하고 알려진 키가있는 경우 항상 객체에 속성을 추가하는 것을 선호합니다. IMO, 사전의 사용 사례는 키가 무엇인지 모르는 경우입니다.

파이썬은 사소합니다.

foo.bar=baz

Java는 거의 동일합니다.

class Foo { public String bar="baz"; }

속성 조회는 사전 조회이고 Java 성능이 더 좋기 때문에 파이썬 성능은 거의 동일합니다.

때때로 사전 키를 유지하기 위해 별도의 클래스를 만듭니다. 그것은 그들에게 자체 네임 스페이스를 제공 할뿐만 아니라 키를 const 문자열에있게하는 정기적 인 이점, 즉 오타의 위험이없고, 코드 완료를 받고, 문자열 값을 쉽게 변경할 수 있다는 것입니다. 별도의 클래스를 만들고 싶지 않다면, 네임 스페이스를 제외한 모든 이점을 얻을 수 있습니다.

즉, 나는 당신이 가까워지고 있다고 생각합니다 소프트 코딩 영토. 사전의 키가 변경되면 사전을 사용하는 코드를 변경해도 괜찮습니다.

개인적으로, 나는 당신의 방법을 사용합니다. 매우 합리적이고 단순하며 실제 문제를 해결합니다.

나는 보통 똑같은 일을한다. 키가 항상 동일하다면 키를 유지하기 위해 어떤 언어로든 '상수 정적'을 만드십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top