内容简介:**数组 Array**数组是一种内建的类型,是一组同类型数据的集合,是一种值类型,可以通过从0开始的下标索引访问元素值,在初始化后其长度就固定了,无法修改其长度,而且Array的长度也是其类型的一部分,可以通过其内置函数len(array)获取其长度,当它作为方法的参数传入时,将复制一份数组,而不是引用同一个指针。初始化:
**数组 Array**
数组是一种内建的类型,是一组同类型数据的集合,是一种值类型,可以通过从0开始的下标索引访问元素值,在初始化后其长度就固定了,无法修改其长度,而且Array的长度也是其类型的一部分,可以通过其内置函数len(array)获取其长度,当它作为方法的参数传入时,将复制一份数组,而不是引用同一个指针。
初始化:
[5]int{1,2,3,4,5} #长度为5的数组,其值分别为1,2,3,4,5
[5]int{1,2} #长度为5的数组,其值分别为1,2,0,0,0 在初始化时,没有指定初值的元素,int类型的默认为0,string类型默认为"",bool类型默认为false
[...]int{1,2,3,4,5} #长度为5的数组,其长度由初始化时元素的个数决定
[5]int{2:1,3:2,4:3} #长度为5的数组,key:value ,其值分别为0,0,1,2,3; 初始化时指定了2、3、4号索引的值分别为1,2,3
[...]int{2:1,4:3} #长度为5的数组,其值分别为0,0,1,0,3, 长度为5(由元素个数决定)
赋值与使用:
package main import "fmt" func test1(){ arr := [...]int{1,2,3,4,5} arr[4]=arr[4]+len(arr) fmt.Println(len(arr)) fmt.Println(arr) } func test2(){ arr2 := [...]int{2:3,3:1,4:0} for index, value := range arr2 { fmt.Printf("arr2[%d] = %d\n",index,value) } fmt.Println("-------------") for index := 0;index<len(arr2);index++ { fmt.Printf("arr2[%d] = %d\n",index,arr2[index]) } } func main(){ test1() test2() }
array 是值类型,将一个数组复制给另一个数组时,实际上是重新复制了一份元素集合。
func test3(){ arr3 := [5]int{2,3} arr5 := arr3 arr3[3]=9 arr5[0]=1 fmt.Printf("arr3=%d\n arr5=%d\n arr5[0]==arr3[0]=%t",arr3,arr5,arr5[0]==arr3[0]) } func main(){ // test1() // test2() test3() }
**切片 Slices**
数组的长度是不可变的,那么在特定的场景中这样的集合就不适合了,于是golang提供了一种功能强悍的内置类型slices,相比于数组array,切片slices的长度是不固定的,可以追加元素,追加元素的时候可能是切片的容量增大。切片slices有两个概念:一个是长度len,一个是容量cap。
初始化
切片可以通过数组来初始化,也可以通过内置函数make()初始化,初始化时len=cap,在追加元素时,当容量不足时,cap将按照len的2倍扩容。
s := []int{1,2,3} #直接初始化切片,切片的初始值为1,2,3;len=cap=3
s := arr[:] #初始化切片s,是数组arr的引用
s := arr[startIndex:endIndex] #将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片
s := arr[startIndex:] #缺省endIndex时将表示一直到arr的最后一个元素
s := arr[:endIndex] #缺省startIndex时将表示从arr的第一个元素开始
s1 := s[startIndex:endIndex] #通过切片s,来初始化切片s1
s :=make([]int,len,cap) #通过内置函数make()初始化切片s,[]int 标识为其元素类型为int的切片
赋值与引用
package main import "fmt" func main(){ s0 := []int{1,2,3,4,5} s1 := s0[1:] fmt.Println("s1=",s1) s0[1]=1 fmt.Println(s1) arr := [...]int{1,2,3,4,6} s2:=arr[:] fmt.Printf("arr=%d, s2=%d\n",arr,s2) arr[3]=3 fmt.Printf("arr=%d,s2=%d\n",arr,s2) fmt.Println("s0=",s0,"s2=",s2,"arr=",arr) s2 = append(s2, s0...) s2 = append(s2, arr[:]...) //追加数组元素 fmt.Println("s2=", s2) s3 := append(s1, 7, 9, 11) fmt.Println("s3=", s3) }
output
s1= [2 3 4 5] [1 3 4 5] arr=[1 2 3 4 6], s2=[1 2 3 4 6] arr=[1 2 3 3 6],s2=[1 2 3 3 6] s0= [1 1 3 4 5] s2= [1 2 3 3 6] arr= [1 2 3 3 6] s2= [1 2 3 3 6 1 1 3 4 5 1 2 3 3 6] s3= [1 3 4 5 7 9 11]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Pro CSS and HTML Design Patterns
Michael Bowers / Apress / April 23, 2007 / $44.99
Design patterns have been used with great success in software programming. They improve productivity, creativity, and efficiency in web design and development, and they reduce code bloat and complexit......一起来看看 《Pro CSS and HTML Design Patterns》 这本书的介绍吧!