Golang中切片元素的添加和删除copy 切片是一个动态数组,可以使用append()
函数添加元素,Golang中并没有删除切片元素的专用方法,我们可以使用切片本身的特性来删除元素。由于,切片是引用类型,通过赋值的方式,会修改原有内容,Golang提供了copy
函数来拷贝切片。
添加元素 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package mainimport "fmt" func add_slice () { var s1 = []int {} s1 = append (s1, 100 ) s1 = append (s1, 200 ) s1 = append (s1, 300 ) fmt.Printf("s1: %v\n" , s1) } func main () { add_slice() }
运行结果
删除元素 1 2 3 4 5 6 7 8 9 10 11 12 package mainimport "fmt" func delete_slice () { var s1 = []int {1 , 2 , 3 , 4 } s1 = append (s1[:2 ], s1[3 :]...) fmt.Printf("s1: %v\n" , s1) } func main () { delete_slice() }
运行结果
修改元素 1 2 3 4 5 6 7 8 9 10 11 12 package mainimport "fmt" func update_slice () { var s1 = []int {1 , 2 , 3 , 4 } s1[1 ] = 100 fmt.Printf("s1: %v\n" , s1) } func main () { update_slice() }
运行结果
查询元素 找到2这个值对应的索引是几
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package mainimport "fmt" func query_slice () { var s1 = []int {1 , 2 , 3 , 4 } var key = 2 for i, v := range s1 { if v == key { fmt.Printf("i: %v\n" , i) } } } func main () { query_slice() }
运行结果
拷贝切片 这里的例子相当于0索引使用的内存地址是一样的,所以修改s2的时候s1也相同修改了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package mainimport "fmt" func copy1_slice () { var s1 = []int {1 , 2 , 3 , 4 } var s2 = s1 s2[0 ] = 100 fmt.Printf("s1: %v\n" , s1) fmt.Printf("s2: %v\n" , s2) } func main () { copy1_slice() }
运行结果
1 2 s1: [100 2 3 4 ] s2: [100 2 3 4 ]
而如果使用copy
,则可以不修改原有切片的值,但是要注意,这个例子中,要先给s2这个切片用make分配一下空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package mainimport "fmt" func copy2_slice () { var s1 = []int {1 , 2 , 3 , 4 } var s2 = make ([]int , 4 ) copy (s2, s1) s2[0 ] = 100 fmt.Printf("s1: %v\n" , s1) fmt.Printf("s2: %v\n" , s2) } func main () { copy2_slice() }
运行结果
1 2 s1: [1 2 3 4 ] s2: [100 2 3 4 ]