>백엔드 개발 >Golang >Go에서 구조체 조각을 그룹화하고 합산하는 방법은 무엇입니까?

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

Susan Sarandon
Susan Sarandon원래의
2024-11-02 04:40:02808검색

How to Group and Sum Slices of Structs in Go?

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

문제

프로그래밍에서는 메모리 내에서 데이터 조작 작업을 수행해야 하는 경우가 종종 있습니다. 컬렉션. 일반적인 작업 중 하나는 데이터를 범주로 그룹화하고 각 범주 내의 값을 합산하는 것입니다. 이 문제는 구조체 조각으로 작업할 때 자주 발생합니다.

도전

다음 구조체 조각을 고려하세요.

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

작업은 요소를 그룹화하는 것입니다. 처음 8개 필드(id 필드)로 분할하고 각 그룹의 Money 필드를 합산합니다. 이 작업은 SQL 쿼리와 유사합니다.

<code class="sql">SELECT SUM(money) FROM Registers GROUP BY id1, id2, id3, id4, id5, id6, id7, id8;</code>

해결책

Go에서 이 문제에 접근하는 방법에는 여러 가지가 있습니다. 한 가지 옵션은 해시 테이블을 사용하여 ID 필드의 각 고유 조합에 대한 합계를 추적하는 것입니다.

  1. 키 유형 생성: ID 필드. 이 구조체는 각 그룹의 고유 식별자 역할을 합니다.
  2. 레지스터 변환: 각 요소가 키 필드와 돈 필드가 있는 구조체인 새 슬라이스를 만듭니다. Key 필드는 요소에 해당하는 키로 설정되고, Money 필드는 변경되지 않습니다.
  3. 맵 초기화: 키 값을 정수 합계에 매핑하는 맵을 생성합니다.
  4. 반복 및 누적: 변환된 슬라이스를 반복합니다. 각 요소에 대해 요소의 Key를 사용하여 맵에서 합계를 검색하고, 요소의 Money 필드를 추가하고, 업데이트된 합계를 다시 맵에 저장합니다.

다음 코드는 이 접근 방식을 보여줍니다.

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

func groupAndSum(registers []*Register) map[Key]int {
    m := map[Key]int{}
    for _, r := range registers {
        key := Key{
            id1: r.id1,
            id2: r.id2,
            id3: r.id3,
            id4: r.id4,
            id5: r.id5,
            id6: r.id6,
            id7: r.id7,
            id8: r.id8,
        }
        m[key] += r.money
    }
    return m
}</code>

이 솔루션은 키를 기준으로 구조체를 그룹화하고 합산하는 효율적인 방법을 제공합니다.

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

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