Go 맵의 사용자 정의 키 비교
Go에서 맵에는 비교 가능한 키가 필요하지만 때로는 사용자 정의 동등 연산이 필요할 수 있습니다. 이 시나리오는 사용자 정의 구조체와 같은 사용자 정의 데이터 구조가 맵 키로 사용될 때 발생합니다.
이 제한을 우회하려면 맵 역할을 하는 구조체에서 별도의 속성을 파생시키는 것이 해결 방법입니다. 열쇠. 이 파생 속성은 원하는 동등 의미 체계를 가져야 하며 본질적으로 키로 사용할 수 있어야 합니다.
다음 예를 고려하십시오.
type Key struct { a *int } func (k *Key) HashKey() int { return *k.a }
이 예에서 HashKey 메서드는 다음과 같은 정수 값을 파생합니다. 키의 신원을 나타냅니다. 그러면 다음 파생 속성을 사용하여 맵을 구성할 수 있습니다.
k1, k2 := Key{intPtr(1)}, Key{intPtr(2)} m := map[int]string{} m[k1.HashKey()] = "one" m[k2.HashKey()] = "two" fmt.Println(m) // Outputs: map[1:one 2:two]
키 비교는 HashKey() 메서드에만 의존하므로 사용자 정의 동등 의미 체계가 허용됩니다.
불변성 고려 사항
그러나 이 접근 방식을 사용할 때는 불변성이 매우 중요합니다. 원본 구조체의 필드가 수정되면 인스턴스의 ID가 변경되었기 때문에 인스턴스를 더 이상 맵 키로 사용할 수 없습니다.
위 내용은 Go Maps에서 사용자 정의 키 비교를 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!