golang 一维数组结构体 根据数组的某个几个键值 分组合并成三维数组
假设我们有一个结构体数组如下:
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 这两个字段进行分组,合并成三维数组。可以按照以下步骤进行:
- 定义一个结构体用于保存分组后的结果:
type GroupedPerson struct {
Age int
Gender string
Persons []Person
}
- 定义一个 map 用于保存分组后的结果,以 Age 和 Gender 作为 key:
grouped := make(map[string][]Person)
- 遍历 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)
}
- 将 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 三个字段。
原文地址: https://www.cveoy.top/t/topic/sNi 著作权归作者所有。请勿转载和采集!