Go 맵의 사용자 정의 키 동일성
Go에서 맵을 생성할 때 구현하는 한 모든 유형을 키로 사용할 수 있습니다. 비교할 수 있는 인터페이스. 기본적으로 Go는 키 비교를 위해 내장된 항등 연산자(==)를 사용합니다. 그러나 고유한 동등 기준을 정의하려는 경우가 있을 수 있습니다.
예
다음 사용자 정의 키 유형을 고려하세요.
type Key struct { a *int }
Key의 두 인스턴스를 비교하려면 자신만의 Equal을 사용하려고 합니다. 함수:
func Equal(x Key, y Key) bool { return *x.a == *y.a }
해결 방법
안타깝게도 Go에서는 맵 키에 대한 사용자 정의 해싱 또는 동등 함수를 지정할 수 없습니다. 대신 다음 해결 방법을 사용할 수 있습니다.
func (k *Key) HashKey() int { return *(*k).a }
예시 사용법
위의 예를 사용하면 맵은 다음과 같습니다.
k1, k2 := Key{intPtr(1)}, Key{intPtr(2)} m := map[int]string{} m[k1.HashKey()] = "one" m[k2.HashKey()] = "two"
주의사항
이 접근 방식은 불변성에 의존한다는 점을 기억하세요. 파생된 키 속성의 Key 구조체의 필드가 변경되면 키의 ID가 변경되고 예상대로 작동하지 않습니다.
위 내용은 Go Maps에 대한 사용자 정의 키 동일성을 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!