Go의 강력한 타이핑 시스템을 사용하면 인터페이스 유형의 키로 지도를 가져오는 기능{}을 지도에 적용할 수 없습니다. int 유형의 키를 사용합니다. Go는 현재 제네릭을 지원하지 않지만 여러 가지 방법으로 일반 Keys 기능을 구현할 수 있습니다.
지도 유형을 유지하려면 다음을 수행하세요. map[int]interface{} 인수를 사용하고 명시적으로 키를 인터페이스로 변환하도록 Keys 함수를 수정합니다.{}:
func Keys(m map[int]interface{}) []interface{} { keys := make([]interface{}, len(m)) i := 0 for k := range m { keys[i] = k i++ } return keys }
또는 Go의 반사 패키지를 사용하여 지도의 키에 액세스하고 이를 인터페이스로 변환할 수 있습니다{}. 그러나 이 접근 방식은 성능에 영향을 미칠 수 있습니다.
func Keys(m interface{}) []interface{} { t := reflect.TypeOf(m) if t.Kind() != reflect.Map { panic("argument must be a map") } keys := make([]interface{}, 0) for _, key := range reflect.ValueOf(m).MapKeys() { keys = append(keys, key.Interface()) } return keys }
잠재적인 성능 문제를 방지하기 위해 맵[ int]인터페이스{}를 map[인터페이스{}]인터페이스{}로:
func convertMap[K1 comparable, V1 any, K2 comparable, V2 any](m map[K1]V1) map[K2]V2 { ret := make(map[K2]V2, len(m)) for k, v := range m { ret[k.(K2)] = v.(V2) } return ret } // Keys returns the keys of the provided map. func Keys[K comparable, V any](m map[K]V) []K { keys := make([]K, len(m)) i := 0 for k := range m { keys[i] = k i++ } return keys }
이러한 도우미 함수를 사용하면 다음을 사용할 수 있습니다. 다음 코드:
m2 := map[int]interface{}{ 2: "string", 3: "int", } convertedMap := convertMap(m2) result := Keys(convertedMap) fmt.Println(result)
위 내용은 Go의 지도에서 키를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!