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