Golang 一维数组结构体分组:根据 Age 和 Gender 合并成三维数组
假设我们有一个结构体数组如下:
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/lEP3 著作权归作者所有。请勿转载和采集!