[]int{1,5,2,3,7} 不是数组。一个数组的长度就像它的类型一样 [5]int{1,5,2,3,7} 。
[]int{1,5,2,3,7}
[5]int{1,5,2,3,7}
制作切片的副本并对其进行排序:
a := []int{1,5,2,3,7} sortedA := make([]int, len(a)) copy(sortedA, a) sort.Ints(sortedA) fmt.Println(a) fmt.Println(sortedA)
切片是指向数组的指针。将数组复制到另一个数组或在函数中传递数组时,将复制或传递整个数组副本。如果阵列大小很大,这将使得操作更加昂贵。所以我们可以去切片。
见“ 切片:用法和内部 “
var av = []int{1,5,2,3,7}
这是一个切片,而不是一个数组。
除了遗漏元素计数之外,slice文字声明就像数组文字一样。
这解释了为什么sort函数会修改 内容 切片引用的内容。
如下评论 柯克 , sort.Ints 如果你传递一个数组而不是一个切片,将会给你一个错误。
sort.Ints
func Ints(a []int)
因为您使用的是切片,而不是数组。
这是一个片段:
这些是阵列:
var av = [...]int{1,5,2,3,7} var bv = [5]int{1,5,2,3,7}
如果你尝试编译:
var av = [...]int{1,5,2,3,7} fmt.Println(av) sort.Ints(av) fmt.Println(av)
,你会收到一个错误:
不能在函数参数中使用av(type [5] int)作为类型[] int
作为sort.Ints期望得到一个 slice [] int 。
在上面的语句中,您正在像数组一样初始化切片
要创建数组,语法应该是
var av = [5]int{1,5,2,3,7}