Go 語言程式:按薪資排序員工
在某些情況下,您可能需要根據員工的薪資以特定順序顯示員工列表。在本文中,我們將建立一個 Go 程式,使用 sort.slice() 函式、sort.Interface 介面以及自定義排序函式來按薪資對員工列表進行排序。
語法
func len(v Type) int
len() 方法返回任何引數的長度。它接受一個輸入,即我們要了解其長度的資料型別變數,並返回一個整數,表示該變數的長度。
func range(variable)
range 函式迭代任何資料型別。要使用它,首先鍵入 range 關鍵字,後跟我們要迭代到的資料型別,迴圈將迭代到變數的最後一個元素。
方法 1:使用 sort.slice() 函式
此方法提供了一種非常簡單的對切片進行排序的方法。透過使用 sort.slice() 函式,我們可以輕鬆地按升序或降序對切片進行排序。
演算法
建立一個 Employee 物件的 "employees" 切片,並使用 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 語言內建的 sort 包透過定義 Len()、Less() 方法來執行排序過程,並對員工切片進行排序。
演算法
建立一個 Employee 物件的 "employees" 切片,並使用 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() 函式。
演算法
開始主函式。
建立一個 Employee 物件的 "employees" 切片,並使用 Employee 資料填充它。
建立一個 "sortBySalary" 函式,該函式接收 Employee 物件的切片作為輸入。
在 "sortBySalary" 和自定義 "bySalary" 型別內部使用 sort.Sort() 函式對 "employees" 切片進行排序。
為 "bySalary" 型別實現 sort.Interface 介面的 Len()、Swap() 和 Less() 方法。
將 "employees" 切片作為引數傳送到 "sortBySalary" 函式。
遍歷已排序的 "employees" 切片,使用 for-each 迴圈。
使用 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
結論
在本文中,我們研究了三種不同的方法來根據員工的薪資對一組 Employee 物件進行排序。Go 的 Sort() 函式使資料排序變得靈活且簡單。
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP