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