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

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 一维数组结构体 根据数组的某个几个键值 分组合并成三维数组

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

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