Golang 创建基于薪水的员工筛选器

Golang 创建基于薪水的员工筛选器

在Go语言中处理数据集时,了解筛选器的知识非常重要,因为有些情况下您可能希望分析数据以获得定制的结果。在本文中,我们将使用传统的循环方法、函数方法以及使用goroutines创建基于薪水的员工列表筛选器。

示例1

在下面的代码中,“FilterEmployeeBySallary()”根据薪水范围筛选员工列表,并返回在该薪水范围内的员工列表。

package main
import "fmt"

type Employee struct {
   Name   string
   Salary int
}

func FilterEmployeesBySalary(employees []Employee, minSalary, maxSalary int) []Employee {
   var filteredEmployees []Employee

   for _, employee := range employees {
      if employee.Salary >= minSalary && employee.Salary <= maxSalary {
         filteredEmployees = append(filteredEmployees, employee)
      }
   }

   return filteredEmployees
}

func main() {
   employees := []Employee{
      {Name: "Aman", Salary: 50000},
      {Name: "Nitin", Salary: 70000},
      {Name: "Akhi", Salary: 40000},
      {Name: "Akshay", Salary: 60000},
   }

   filtered := FilterEmployeesBySalary(employees, 45000, 65000)
   fmt.Println("Filtered Employees:", filtered)
}

输出

Filtered Employees: [{Aman 50000} {Akshay 60000}]

示例2

在下面给出的代码中,“filterEmployees”函数根据给定的过滤器对员工列表进行过滤,而“sallaryFilter()”函数则返回一个用于根据薪水过滤员工的过滤函数。

package main

import "fmt"

type Employee struct {
   Name   string
   Salary int
}

type FilterFunc func(Employee) bool

func FilterEmployees(employees []Employee, filterFunc FilterFunc) []Employee {
   var filteredEmployees []Employee

   for _, employee := range employees {
      if filterFunc(employee) {
         filteredEmployees = append(filteredEmployees, employee)
      }
   }

   return filteredEmployees
}

func SalaryFilter(minSalary, maxSalary int) FilterFunc {
   return func(employee Employee) bool {
      return employee.Salary >= minSalary && employee.Salary <= maxSalary
   }
}

func main() {
   employees := []Employee{
      {Name: "Sam", Salary: 50000},
      {Name: "Akhil", Salary: 70000},
      {Name: "Akshay", Salary: 40000},
      {Name: "Summer", Salary: 80000},
   }

   salaryFilter := SalaryFilter(45000, 85000)
   filtered := FilterEmployees(employees, salaryFilter)
   fmt.Println("Filtered Employees:", filtered)
}

输出

Filtered Employees: [{Sam 50000} {Akhil 70000} {Summer 80000}]

示例3

给定的代码创建了一个goroutine,用于根据给定的工资异步过滤每个员工,并通过一个通道发送过滤后的员工,main函数接收过滤后的员工并返回最终结果。

package main

import (
   "fmt"
   "time"
)

type Employee struct {
   Name   string
   Salary int
}

func FilterEmployeesConcurrently(employees []Employee, minSalary, maxSalary int) []Employee {
   var filteredEmployees []Employee
   employeeChannel := make(chan Employee)

   for _, employee := range employees {
      go func(e Employee) {
         if e.Salary >= minSalary && e.Salary <= maxSalary {
             employeeChannel <- e
     }
      }(employee)
   }

   // Collect filtered employees from the channel
   go func() {
      for employee := range employeeChannel {
         filteredEmployees = append(filteredEmployees, employee)
      }
   }()

   time.Sleep(time.Millisecond)

   return filteredEmployees
}

func main() {
   employees := []Employee{
      {Name: "Arya", Salary: 5000},
      {Name: "Sansa", Salary: 7000},
      {Name: "Rob", Salary: 4000},
      {Name: "John", Salary: 6000},
   }

   filtered := FilterEmployeesConcurrently(employees, 4500, 6500)
   fmt.Println("Filtered Employees:", filtered)
}

输出

Filtered Employees: [{Arya 5000} {John 6000}]

结论

在本文中,我们讨论了如何在golanguage中根据员工的工资创建过滤器。我们探讨了三种不同的方法,包括使用goroutines和通道、传统的循环和函数式方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程