从一个golang 员工emp数组中,找到其中name相同的元素,把结果放到一个新数组里,代码实现

发布时间 2023-09-24 16:07:52作者: Lucky小黄人^_^

内容来自对 chatgpt 的咨询

为了找到具有相同名称的员工,并将结果放入一个新的数组中,我们可以首先使用一个映射(map)来存储每个名称及其出现的次数。然后,我们可以遍历原始数组并使用映射来判断是否有重复的名称。

以下是一个示例代码,演示如何实现这一目标:

package main

import (
	"fmt"
)

// 定义员工结构
type Employee struct {
	Name string
	ID   int
}

// findDuplicates 返回具有重复名称的员工列表
func findDuplicates(emps []Employee) []Employee {
	nameCount := make(map[string]int)
	duplicates := make([]Employee, 0)

	// 计算每个名称的出现次数
	for _, emp := range emps {
		nameCount[emp.Name]++
	}

	// 找到具有重复名称的员工
	for _, emp := range emps {
		if nameCount[emp.Name] > 1 {
			duplicates = append(duplicates, emp)
			nameCount[emp.Name]-- // 减少计数,避免重复添加
		}
	}

	return duplicates
}

func main() {
	employees := []Employee{
		{Name: "Alice", ID: 1},
		{Name: "Bob", ID: 2},
		{Name: "Charlie", ID: 3},
		{Name: "Bob", ID: 4},
		{Name: "Alice", ID: 5},
	}

	duplicateEmployees := findDuplicates(employees)
	fmt.Println(duplicateEmployees) // 输出有重复名称的员工
}