假设我们有一个结构体数组如下:

 type Person struct {
     Name   string
     Age    int
     Gender string
 }
persons := []Person{
     {Name: 'Alice', Age: 25, Gender: 'Female'},
     {Name: 'Bob', Age: 30, Gender: 'Male'},
     {Name: 'Charlie', Age: 35, Gender: 'Male'},
     {Name: 'David', Age: 40, Gender: 'Male'},
     {Name: 'Eva', Age: 45, Gender: 'Female'},
     {Name: 'Frank', Age: 50, Gender: 'Male'},
 }

现在我们需要根据 Age 和 Gender 这两个字段进行分组,合并成三维数组。可以按照以下步骤进行:

  1. 定义一个结构体用于保存分组后的结果:
 type GroupedPerson struct {
     Age    int
     Gender string
     Persons []Person
 }
  1. 定义一个 map 用于保存分组后的结果,以 Age 和 Gender 作为 key:
 grouped := make(map[string][]Person)
  1. 遍历 persons 数组,将每个元素加入到对应的 GroupedPerson 中:
 for _, p := range persons {
     key := fmt.Sprintf('%d-%s', p.Age, p.Gender)
     if _, ok := grouped[key]; !ok {
         grouped[key] = []Person{}
     }
     grouped[key] = append(grouped[key], p)
 }
  1. 将 map 转换为一个 GroupedPerson 数组:
 var result []GroupedPerson
 for key, persons := range grouped {
     parts := strings.Split(key, '-')
     age, _ := strconv.Atoi(parts[0])
     gender := parts[1]
     result = append(result, GroupedPerson{Age: age, Gender: gender, Persons: persons})
 }

现在 result 数组就是我们需要的三维数组,每个元素包含 Age、Gender 和 Persons 三个字段。

Golang 一维数组结构体分组:根据 Age 和 Gender 合并成三维数组

原文地址: https://www.cveoy.top/t/topic/lEP3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录