我发现自己被array和slice数据类型搞混了。
在Go文档中,数组描述如下:
数组在Go中的工作方式与C在Go中的工作方式有很大的不同,
功能:
与C族中的所有语言一样,Go中的所有内容都是通过值传递的。也就是说,函数总是得到传递的东西的副本,就好像有一个赋值语句将值赋值给参数一样。例如,将int值传递给函数会产生int的副本,而传递指针值则会复制指针,而不是它所指向的数据。
为什么当我将传递的变量声明为数组而不是切片时,sort.Ints(arrayValue)会修改它呢?
代码
var av = []int{1,5,2,3,7}
fmt.Println(av)
sort.Ints(av)
fmt.Println(av)
return输出
[1 5 2 3 7]
[1 2 3 5 7]发布于 2012-07-31 09:39:17
发布于 2012-07-31 09:38:47
因为你用的是切片而不是数组。
这是一片:
var av = []int{1,5,2,3,7}这些是数组:
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 (类型5int)作为类型[]int
因为sort.Ints希望收到一个片[]int。
发布于 2012-07-31 09:47:25
[]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)https://stackoverflow.com/questions/11737053
复制相似问题