여러 맵에서 동시에 키 존재 확인
질문:
Go에서 언제 여러 맵에 동일한 키가 있는지 확인하는 한 가지 방법은 if 내에서 ok 플래그를 사용하는 것입니다.
if v1, ok1 := map1["aaa"]; ok1 { ... } if v2, ok2 := map2["aaa"]; ok2 { ... }
그러나 이 두 조건을 하나로 압축하는 것이 바람직합니다. 단일 if 문으로 이를 달성할 수 있습니까?
답변:
안타깝게도 단일 if 조건을 사용하여 여러 맵에서 키 존재 확인을 수행하는 것은 불가능합니다. Go 언어 사양에서는 v, ok := m[k] 형식의 할당 또는 초기화에서 인덱스 표현식(예: map1["aaa"])이 추가로 형식화되지 않은 부울 값(ok)을 생성하도록 요구합니다.
이는 특별한 v, ok := m[k] 형식이 다른 것이 할당되지 않은 경우에만 사용될 수 있음을 의미합니다. 그러나 맵의 값 유형이 인터페이스 유형이고 nil 값이 사용되지 않는 경우 대체 접근 방식이 있습니다. 이 경우 간단한 튜플 할당을 사용할 수 있습니다.
if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil { fmt.Printf("Both maps contain key '%s': %v, %v\n", "aaa", v1, v2) }
이 프로세스를 더욱 단순화하려면 키 확인을 수행하고 두 맵 모두에 대해 값과 ok 플래그를 반환하는 도우미 함수를 생성할 수 있습니다.
func idx(m1, m2 map[string]interface{}, k string) ( v1, v2 interface{}, ok1, ok2 bool) { v1, ok1 = m1[k] v2, ok2 = m2[k] return }
그런 다음 이 기능을 사용하여 단일 단계를 수행할 수 있습니다. 확인:
if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 { fmt.Printf("Both maps contain key '%s': %v, %v\n", "aaa", v1, v2) }
이러한 기술을 활용하면 Go의 여러 맵에서 키의 존재를 효율적으로 확인할 수 있습니다.
위 내용은 여러 Go 맵에서 키의 존재를 동시에 효율적으로 확인하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!