Golang 按工资对员工进行排序

Golang 按工资对员工进行排序

有一些情况下,您可能有一份员工名单,您需要根据他们的薪水对他们进行排序并以特定顺序显示。在本文中,我们将使用 sort.slice() 函数、sort.interface 接口以及自定义排序函数来创建一个 Go 程序来对员工名单按工资进行排序。

语法

func len(v Type) int

len() 方法返回任何参数的长度。它接受一个输入,即我们想要知道长度的数据类型变量,并返回变量的长度的整数值。

func range(variable)

range函数可以迭代任何数据类型。要利用这一点,首先输入range关键字,然后是要迭代的数据类型,循环将一直迭代到变量的最后一个元素。

方法1:使用sort.slice()函数

这种方法提供了一种非常简单的方式来对切片进行排序。通过使用sort.slice()函数,我们可以轻松地按任意顺序(升序或降序)对切片进行排序。

步骤

  • 创建一个名为”employees”的Employee对象的切片,并用Employee数据填充它。

  • 创建一个名为”less”的比较函数,它接受两个索引(i和j)作为输入。

  • 在”less”函数下,比较employees[i]的工资和employees[j]的工资。

  • 如果employees[i]的工资低于employees[j]的工资,则返回true。

  • 否则返回false。使用sort函数对”employees”切片进行排序。

  • slice()方法接受切片和”less”函数作为输入。

  • 使用for-each循环遍历已排序的”employees”切片。

  • 使用fmt.Printf()函数打印每个员工的姓名和工资。

示例

下面的示例演示了如何使用sort.sort()函数根据特定属性对切片进行排序。

package main

import (
   "fmt"
   "sort"
)

type Employee struct {
   Name   string
   Salary int
}

func main() {
   employees := []Employee{
      {Name: "Akhil", Salary: 50000},
      {Name: "Akshay", Salary: 30000},
      {Name: "Sahil", Salary: 40000},
   }

   less := func(i, j int) bool {
      return employees[i].Salary < employees[j].Salary
   }

   sort.Slice(employees, less)

   for _, emp := range employees {
      fmt.Printf("Name: %s, Salary: %d\n", emp.Name, emp.Salary)
   }
}

输出

Name: Akshay, Salary: 30000 
Name: Sahil, Salary: 40000 
Name: Akhil, Salary: 50000

方法2:使用Sort.interface()接口

此函数允许自定义排序数据。我们可以使用Go语言的内置排序包来定义Len(),Less()方法,并对员工切片进行排序。

步骤

  • 创建一个名为“employees”的Employee对象切片,并用Employee数据填充它。

  • 创建一个新类型“BySalary”,表示Employee对象的一个子集。

  • 为“BySalary”类型实现sort.Interface接口的Len()、Swap()和Less()方法。

  • 使用sort.Sort()和“BySalary”接口对“employees”切片进行排序,将“BySalary(employees)”作为参数传递。

  • 使用for-each循环遍历排序后的“employees”切片。

  • 使用fmt.Printf()函数打印每个员工的姓名和薪水。

示例

以下示例是根据员工薪水对员工数据切片进行排序的示例,使用自定义类型“BySalary”。程序打印了排序后的员工列表,包括员工姓名和对应的薪水。

package main

import (
   "fmt"
   "sort"
)

type Employee struct {
   Name   string
   Salary int
}

type BySalary []Employee

func (s BySalary) Len() int           { return len(s) }
func (s BySalary) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
func (s BySalary) Less(i, j int) bool { return s[i].Salary < s[j].Salary }

func main() {
   employees := []Employee{
      {Name: "Akhil", Salary: 50000},
      {Name: "Akshay", Salary: 30000},
      {Name: "Sahil", Salary: 40000},
      {Name: "Nitin", Salary: 45000},
      {Name: "Sourab", Salary: 18000},
   }

   sort.Sort(BySalary(employees))

   for _, emp := range employees {
      fmt.Printf("Name: %s, Salary: %d\n", emp.Name, emp.Salary)
   }
}

输出

Name: Sourab, Salary: 18000 
Name: Akshay, Salary: 30000 
Name: Sahil, Salary: 40000 
Name: Nitin, Salary: 45000 
Name: Akhil, Salary: 50000

方法3:使用sort.Sort()和自定义排序函数

此方法涉及一个自定义排序函数,该函数接收员工切片并根据薪水字段进行排序。为了执行此操作,我们可以使用sort.Sort()函数。

步骤

  • 开始主函数。

  • 创建一个名为”employees”的Employee对象切片并填充Employee数据。

  • 创建一个名为”sortBySalary”的函数,该函数以Employee对象切片作为输入。

  • 使用sort.Sort()函数和自定义的”bySalary”类型在”sortBySalary”函数内对”employees”切片进行排序。

  • 为”bySalary”类型实现sort.Interface接口的Len()、Swap()和Less()方法。

  • 将”employees”切片作为参数传递给”sortBySalary”函数。

  • 遍历已排序的”employees”切片的每个元素。

  • 使用fmt.Printf()函数打印每个员工的姓名和工资。

示例

下面的代码根据员工的薪水对一个名为”employee”的切片进行排序,然后打印员工的姓名和工资。

package main

import (
   "fmt"
   "sort"
)

type Employee struct {
   Name   string
   Salary int
}

func sortBySalary(employees []Employee) {
   sort.Sort(bySalary(employees))
}

type bySalary []Employee

func (s bySalary) Len() int { return len(s) }
func (s bySalary) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s bySalary) Less(i, j int) bool { return s[i].Salary < s[j].Salary }

func main() {
   employees := []Employee{
      {Name: "Akhil", Salary: 50000},
      {Name: "Akshay", Salary: 30000},
      {Name: "Sahil", Salary: 40000},
   }

   sortBySalary(employees)

   for _, emp := range employees {
      fmt.Printf("Name: %s, Salary: %d\n", emp.Name, emp.Salary)
   }
}

输出

Name: Akshay, Salary: 30000 
Name: Sahil, Salary: 40000 
Name: Akhil, Salary: 50000

结论

在本文中,我们介绍了三种不同的方式来根据员工薪资对员工对象进行排列。使用Go的Sort()函数可以灵活简单地进行数据排序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程