常用数组函数
Go语言中有一些常用的数组函数可以方便地操作数组。
例如:
len():用于获取数组的长度。
arr := [5]int{1, 2, 3, 4, 5}
length := len(arr) // length = 5
cap():用于获取数组的容量,只有在数组的底层数组是可寻址的情况下才能使用。
arr := [5]int{1, 2, 3, 4, 5}
capacity := cap(arr) // capacity = 5
copy():用于将一个数组的元素复制到另一个数组中。
arr1 := [3]int{1, 2, 3}
arr2 := [3]int{4, 5, 6}
copy(arr1, arr2) // arr1 = [4 5 6]
append():用于向数组中添加元素,如果底层数组容量不够,会自动进行扩容。
arr := []int{1, 2, 3}
arr = append(arr, 4) // arr = [1 2 3 4]
sort包:Go语言中提供了sort包来对数组进行排序,可以使用sort.Ints()函数对整型数组进行排序。
arr := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
sort.Ints(arr) // arr = [1 1 2 3 3 4 5 5 5 6 9]
一维数组的排序
在 Go 语言中,对一维数组进行排序可以使用标准库中的 sort 包,该包提供了多种排序算法,包括快速排序、归并排序等。
相关知识点:
-
sort.Ints函数可以用于对整数类型的一维数组进行排序。 -
sort.Strings函数可以用于对字符串类型的一维数组进行排序。 -
sort.Float64s函数可以用于对浮点数类型的一维数组进行排序。 -
以上三个函数都会修改原始数组,排序后的结果会直接反映在原始数组中。
-
sort.Search函数可以用于在已排序的一维数组中查找指定的元素,返回元素在数组中的索引。 -
sort.Reverse函数可以用于将已排序的一维数组进行逆序排序。
示例代码
package main
import (
"fmt"
"sort"
)
func main() {
// 对整数类型的一维数组进行排序
numbers := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3}
sort.Ints(numbers)
fmt.Println("Sorted numbers:", numbers)
// 对字符串类型的一维数组进行排序
words := []string{"apple", "banana", "cherry", "date", "elderberry"}
sort.Strings(words)
fmt.Println("Sorted words:", words)
// 对浮点数类型的一维数组进行排序
floats := []float64{3.14, 1.41, 2.71, 4.13, 1.62}
sort.Float64s(floats)
fmt.Println("Sorted floats:", floats)
// 在已排序的一维数组中查找指定的元素
index := sort.SearchInts(numbers, 5)
fmt.Println("Index of 5 in sorted numbers:", index)
// 将已排序的一维数组进行逆序排序
sort.Sort(sort.Reverse(sort.IntSlice(numbers)))
fmt.Println("Reverse sorted numbers:", numbers)
}
二维数组的排序
Go语言中对二维数组进行排序,可以使用标准库中的sort包,其实现了多种排序算法。其中,对于二维数组,可以使用自定义排序函数进行排序。
一般情况下,排序函数需要满足以下两个条件:
- 接收两个参数,返回一个bool值,表示第一个参数是否应该排在第二个参数的前面;
- 该函数需要满足可传递性,即若 a 小于 b,b 小于 c,则 a 必须小于 c。
示例代码
package main
import (
"fmt"
"sort"
)
func main() {
// 定义一个二维数组
arr := [][]int{
{3, 2, 1},
{6, 5, 4},
{9, 8, 7},
}
// 定义一个排序函数
sortFunc := func(i, j int) bool {
return arr[i][0] < arr[j][0] // 按第一列升序排序
}
// 对二维数组进行排序
sort.SliceStable(arr, sortFunc)
// 输出排序结果
for _, row := range arr {
fmt.Println(row)
}
}
在上面的示例代码中,首先定义了一个二维数组arr,然后定义了一个排序函数sortFunc。该函数接收两个参数 i 和 j,返回一个 bool 值,表示 arr[i] 是否应该排在 arr[j] 的前面。这里的排序规则是按照二维数组的第一列进行升序排序。
最后使用sort.SliceStable函数对二维数组进行排序,该函数使用 stabler 来确保排序的稳定性,即对于相等的元素,排序后它们的相对位置不会改变。最后遍历排序后的二维数组并输出结果。