Go 1.21新增的 slices 包提供了很多和切片相关的函数
slices.BinarySearch
package main
import (
"fmt"
"slices"
)
func main() {
nums := []int{1, 3, 5, 7, 9}
// 查找 5
index, found := slices.BinarySearch(nums, 5)
fmt.Printf("5 的位置: %d, 是否找到: %v\n", index, found) // 输出: 5 的位置: 2, 是否找到: true
// 查找 6(6 不在 nums 中)
index, found = slices.BinarySearch(nums, 6)
fmt.Printf("6 的插入位置: %d, 是否找到: %v\n", index, found) // 输出: 6 的插入位置: 3, 是否找到: false
}
slices.Max
package main
import (
"fmt"
"slices"
)
func main() {
var arr []int = []int{1, 2, 33, 4, 6, 123, 4444, 12}
res := slices.Max(arr)
fmt.Println(res)
}
slices.MaxFunc
package main
import (
"cmp"
"fmt"
"slices"
)
func main() {
type Person struct {
Name string
Age int
}
people := []Person{
{"Alice", 25},
{"Bob", 30},
{"Charlie", 35},
{"David", 40},
{"Eve", 45},
}
firstOldes := slices.MaxFunc(people, func(a, b Person) int {
return cmp.Compare(a.Age, b.Age)
})
fmt.Println("The oldest person is:", firstOldes.Name)
}
返回里面人最老的
slices.Min
package main
import (
"fmt"
"slices"
)
func main() {
arr := []int{1, 2, 3, 45, 5, 6, 6, 78}
minNum := slices.Min[[]int](arr)
fmt.Println(minNum)
}
slices.MinFunc
package main
import (
"cmp"
"fmt"
"slices"
)
func main() {
type Person struct {
Name string
Age int
}
var personArr []Person = []Person{
{"Tom", 20},
{"Jerry", 18},
{"Alice", 22},
}
minNum := slices.MinFunc[[]Person](personArr, func(a, b Person) int {
return cmp.Compare[int](a.Age, b.Age)
})
fmt.Println(minNum)
}
slices.Replace
package main
import (
"fmt"
"slices"
)
func main() {
names := []string{"Alice", "Bob", "Vera", "Zac"}
names = slices.Replace(names, 1, 3, "Bill", "Billie", "Cat")
fmt.Println(names) // [Alice Bill Billie Cat Zac]
}
slices.Reverse
package main
import (
"fmt"
"slices"
)
func main() {
arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
slices.Reverse[[]int](arr)
fmt.Println(arr)
}
slices.Sort
package main
import (
"fmt"
"slices"
)
func main() {
arr := []int{5, 4, 132, 1, -3, 43}
slices.Sort[[]int](arr)
fmt.Println(arr)
}
package main
import (
"fmt"
"slices"
)
func main() {
arr := []int{1, 2, 3, 5, -1, 30, 404, 23}
slices.SortFunc[[]int](arr, func(a, b int) int {
return b - a
})
fmt.Println(arr)
}