>백엔드 개발 >Golang >Go 슬라이스를 맵 키로 사용할 수 없는 이유는 무엇입니까?

Go 슬라이스를 맵 키로 사용할 수 없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-19 05:45:02634검색

Why Can't Go Slices Be Used as Map Keys?

Go 슬라이스를 맵 키로 사용하는 경우의 제한 사항

기본적으로 Go 배열을 구현한 Go 슬라이스는 다음과 같은 측면에서 배열과 유사점을 공유합니다. 그들의 가치 유형 성격. 그러나 맵 키로서의 적합성은 배열의 적합성과 크게 다릅니다. 이러한 구별은 슬라이스가 기본 배열을 참조하므로 배열에는 없는 복잡성이 발생한다는 사실에서 비롯됩니다.

Nigel Tao가 설명했듯이 슬라이스 복사는 O(1 덕분에 배열 복사보다 훨씬 빠릅니다. ) 시간 복잡도를 배열의 O(length) 복잡도와 비교합니다. 이러한 차이는 값 유형(배열)과 참조 유형(슬라이스) 간의 차이를 강조합니다.

맵 키를 정의할 때 동등 개념을 설정하는 것이 필요합니다. 배열의 경우 개별 요소를 비교하여 동등성을 간단하게 결정합니다. 그러나 슬라이스의 경우 동등성을 정의하는 방법은 여러 가지가 있습니다. 참조하는 기본 배열 저장소에 따라 요소별 동등성 또는 동등성을 고려하세요.

게다가 맵에 키를 삽입하는 행위는 전체 백업 배열의 값비싼 사본이 필요한지 여부에 대한 불확실성을 야기합니다. 복사는 기대에 부합할 수 있지만 슬라이스의 할당 동작에서 벗어날 수 있습니다.

이러한 복잡성을 설명하기 위해 다음 예를 고려하세요.

m := make(map[[]int]bool)
s0 := []int{6, 7, 8}
s1 := []int{6, 7, 8}
s2 := s0
m[s0] = true
s2[0] = 9
println(m[s0])
println(m[s1])
println(m[s2])

프로그래머가 복사에 대해 가질 수 있는 다양한 기대 결과는 슬라이스를 맵 키로 사용할 때 발생할 수 있는 혼란 가능성을 보여줍니다. 이러한 모호함을 피하기 위해 Go에서는 슬라이스를 맵 키로 사용하지 못하도록 선택했습니다.

위 내용은 Go 슬라이스를 맵 키로 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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