"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 중복된 값을 피하면서 Golang에서 여러 지도를 병합하는 방법은 무엇입니까?

중복된 값을 피하면서 Golang에서 여러 지도를 병합하는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:638

How to Merge Multiple Maps in Golang While Avoiding Duplicate Values?

Golang에서 지도 병합

문제:
여러 지도를 병합하여 지도 전체에서 동일한 키와 연결된 값을 유지합니다.

초기 접근 방식:

제공된 코드는 각 맵을 반복하고 일치하는 키를 기반으로 결과 맵에 값을 추가하여 맵을 병합하려고 시도합니다. 그러나 이 접근 방식은 결과 맵 내의 중복 값을 처리하지 않습니다.

단순 병합:

수정된 병합 함수를 구현하여 조각에 값을 추가하여 중복을 처리할 수 있습니다. 결과 맵의 키와 연결됩니다.

func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
        for k, v := range m {
            res[k] = append(res[k], v)
        }
    }
    return res
}

중복 방지:

결과 맵에서 중복을 방지하려면 추가하기 전에 기존 값을 확인하도록 병합 기능을 수정할 수 있습니다.

func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
    srcMap:
        for k, v := range m {
            // Check if (k,v) was added before:
            for _, v2 := range res[k] {
                if v == v2 {
                    continue srcMap
                }
            }
            res[k] = append(res[k], v)
        }
    }
    return res
}

테스트:

m1 := map[string]string{"id_1": "val_1"}
m2 := map[string]string{"id_2": "val_2", "id_1": "val_1"}
m3 := map[string]string{"id_1": "val_3"}

res := merge(m1, m2, m3)
fmt.Println(res)

출력:

map[id_1:[val_1 val_3] id_2:[val_2]]

이는 병합을 보여줍니다. 동일한 키와 관련된 값을 보존하고 중복을 방지합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3