>  기사  >  백엔드 개발  >  Go에서 구조체 조각을 효율적으로 그룹화하고 합산하는 방법은 무엇입니까?

Go에서 구조체 조각을 효율적으로 그룹화하고 합산하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-05 07:25:02661검색

How to Efficiently Group and Sum a Slice of Structs in Go?

Go에서 구조체 조각 그룹화 및 합산

이 시나리오에서는 8개의 특정 필드를 기반으로 구조체 조각을 그룹화하는 것을 목표로 합니다. SQL 쿼리와 유사하게 추가 정수 필드를 합산합니다. 이를 달성하기 위해 처음에는 구조체를 비교하고 각 항목이 해시 테이블에 있는지 반복적으로 확인하고 그에 따라 필드를 추가하거나 합하는 Equal 함수를 만드는 것을 고려했습니다.

접근 방식은 유효하지만 다음과 같은 대체 솔루션이 있습니다. 효율성과 단순성을 제공합니다. 키 필드(id1-id8)가 별도의 구조체인 Key를 형성하도록 유형을 리팩터링합니다. Go에서 구조체를 비교할 수 있으므로 Key를 맵 키로 사용할 수 있습니다.

수정된 유형 정의는 다음과 같습니다.

<code class="go">type Key struct {
    id1 int
    id2 int
    id3 int
    id4 int
    id5 int
    id6 int
    id7 int
    id8 int
}

type Register struct {
    key   Key
    money int
}</code>

합계를 그룹화하고 계산하려면 맵을 사용하세요. 키]int. Register.key를 맵 키로 사용하여 동일한 키(ID)를 가진 모든 레지스터를 수집합니다.

<code class="go">regs := []*Register{
    {Key{id1: 345}, 1500},
    {Key{id1: 345, id2: 140}, 2700},
    {Key{id1: 345, id2: 140}, 1300},
    {Key{id1: 345}, 1000},
    {Key{id3: 999}, 1000},
    {Key{id3: 999}, 2000},
}

// calculate sum:
m := map[Key]int{}
for _, v := range regs {
    m[v.key] += v.money
}</code>

이 솔루션은 제공된 구조체 조각을 그룹화하고 합산하는 간단하고 효율적인 방법을 제공합니다. 추가 라이브러리나 복잡한 반복 메커니즘이 필요하지 않습니다.

위 내용은 Go에서 구조체 조각을 효율적으로 그룹화하고 합산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.