> 백엔드 개발 > Golang > 여러 Go 맵에서 키의 존재를 동시에 효율적으로 확인하려면 어떻게 해야 합니까?

여러 Go 맵에서 키의 존재를 동시에 효율적으로 확인하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-13 02:08:09
원래의
288명이 탐색했습니다.

How Can I Efficiently Check for the Existence of a Key in Multiple Go Maps Simultaneously?

여러 맵에서 동시에 키 존재 확인

질문:

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿