Go 语言程序:创建员工过滤器


Go 语言允许您对特定数据应用过滤器,以便分析指定数据、处理数据的特定属性、数据集成等等。本文将编写一个程序来创建员工过滤器,使用迭代过滤、函数式过滤以及 Go 语言内置的过滤函数。

语法

filtered := funk.Filter(collection, func(item Type) bool {…})   

collection = 要过滤的原始集合。

此函数接受两个参数:一个集合和一个过滤函数。

算法

  • 创建一个名为“employees”的 Employee 类型的数组或切片。

  • 使用包含员工姓名、年龄和部门的 Employee 实例集合来设置“employees”切片。

  • 调用 filterEmployeesByAge 函数,并将“employees”切片、最小年龄和最大年龄作为参数提供。

  • 在 filterEmployeesByAge 方法中,创建一个名为“filteredEmployees”的空 Employee 类型切片。确定每个员工的年龄是否大于或等于最小年龄且小于或等于最大年龄。如果年龄在提供的范围内,则将员工添加到“filteredEmployees”切片中。获取“filteredEmployees”切片。

  • 将变量“filtered”设置为 filterEmployeesByAge 的结果。

  • 应打印“已过滤的员工:”。遍历“filtered”切片中的所有员工。

  • 打印每个员工的姓名。结束 main 函数。

示例 1

在此方法中,我们将使用迭代方法来过滤员工数据。当您需要对过滤过程进行更多控制时,此方法更适用。

package main

import "fmt"

type Employee struct {
   Name       string
   Age        int
   Department string
}

func filterEmployeesByAge(employees []Employee, minAge, maxAge int) []Employee {
   var filteredEmployees []Employee

   for _, emp := range employees {
      if emp.Age >= minAge && emp.Age <= maxAge {
         filteredEmployees = append(filteredEmployees, emp)
      }
   }

   return filteredEmployees
}

func main() {
   employees := []Employee{
      {Name: "Akhil", Age: 24, Department: "Engineering"},
      {Name: "Akshay", Age: 28, Department: "Sales"},
      {Name: "Sahil", Age: 23, Department: "Marketing"},
   }

   filtered := filterEmployeesByAge(employees, 24, 45)

   fmt.Println("Filtered Employees:")
   for _, emp := range filtered {
      fmt.Println(emp.Name)
   }
}

输出

Filtered Employees:
Akhil
Akshay

示例 2

在此方法中,我们将使用高阶函数来过滤员工。此方法涉及使用“filter”等高阶函数来应用过滤函数。

package main

import "fmt"

type Employee struct {
   Name       string
   Age        int
   Department string
}

type Predicate func(Employee) bool

func filterEmployees(employees []Employee, predicate Predicate) []Employee {
   var filteredEmployees []Employee

   for _, emp := range employees {
      if predicate(emp) {
         filteredEmployees = append(filteredEmployees, emp)
      }
   }

   return filteredEmployees
}

func main() {
   employees := []Employee{
      {Name: "Akhil", Age: 24, Department: "Engineering"},
      {Name: "Akshay", Age: 32, Department: "Sales"},
      {Name: "Nitin", Age: 28, Department: "Marketing"},
	}

   filtered := filterEmployees(employees, func(emp Employee) bool {
      return emp.Age>= 30 && emp.Age <= 45
   })

   fmt.Println("Filtered Employees:")
   for _, emp := range filtered {
      fmt.Println(emp.Name)
   }
}

输出

Filtered Employees:
Akshay

示例 3

在下面给出的代码中,我们将使用“go-funk”库根据特定年龄过滤员工切片。

package main

import (
   "fmt"

   "github.com/thoas/go-funk"
)

type Employee struct {
   Name       string
   Age        int
   Department string
}

func main() {
   employees := []Employee{
      {Name: "Akhil", Age: 28, Department: "Engineering"},
      {Name: "Akshay", Age: 32, Department: "Sales"},
      {Name: "Sahil", Age: 40, Department: "Marketing"},
   }

   filtered := funk.Filter(employees, func(emp Employee) bool {
      return emp.Age >= 30 && emp.Age <= 45
   }).([]Employee)

   fmt.Println("Filtered Employees:")
   for _, emp := range filtered {
      fmt.Println(emp.Name)
   }
}

输出

Filtered Employees: 
Akshay 
Sahil

结论

在本文中,我们讨论了如何在 Go 语言中为员工创建过滤器。我们探讨了不同的数据过滤技术,包括名为 funk.filter() 的内置函数、函数式过滤方法以及迭代过滤。当您想要处理特定属性、分析数据等时,数据过滤非常有用。

更新于: 2023年7月14日

582 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告