写一个golang结构体数组根据某一个成员变量去重的方法
时间: 2023-05-28 09:06:02 浏览: 124
以下是一个基于某个成员变量去重的结构体数组去重的示例代码:
```
type Person struct {
Name string
Age int
Address string
}
func RemoveDuplicates(persons []Person, keyFunc func(p Person) string) []Person {
keys := make(map[string]bool)
var result []Person
for _, p := range persons {
key := keyFunc(p)
if _, ok := keys[key]; !ok {
keys[key] = true
result = append(result, p)
}
}
return result
}
func main() {
persons := []Person{
{Name: "Alice", Age: 24, Address: "123 Main St"},
{Name: "Bob", Age: 32, Address: "456 Elm St"},
{Name: "Charlie", Age: 24, Address: "789 Oak St"},
{Name: "Dave", Age: 32, Address: "1011 Pine St"},
}
uniquePersons := RemoveDuplicates(persons, func(p Person) string { return fmt.Sprintf("%d", p.Age) })
fmt.Println(uniquePersons)
}
```
该程序定义了一个 `Person` 结构体,包括姓名、年龄和地址等信息。然后,定义了一个 `RemoveDuplicates` 函数,该函数接受一个 `Person` 结构体数组和一个函数作为参数。该函数会使用 `keyFunc` 函数来生成每个结构体的“关键字”,然后根据这些关键字创建一个 `map` 来去重。最后,将去重后的结果存储在一个新的 `Person` 结构体数组中并返回。
在 `main` 函数中,使用示例 `Person` 数组调用 `RemoveDuplicates` 函数,并使用一个函数来选择以年龄作为关键字进行去重。最终,去重后的结果将被打印到控制台上。
阅读全文