>백엔드 개발 >Golang >Go Maps에서 사용자 정의 키 비교를 어떻게 구현할 수 있나요?

Go Maps에서 사용자 정의 키 비교를 어떻게 구현할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-16 06:11:16693검색

How Can I Implement Custom Key Comparison in Go Maps?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.