golang之slice变长数组-创新互联

slice:就是变长数组,主要是因为array(数组)长度不可变,导致在使用的时候存在诸多限制,才有了slice;slice 主要包含3个部分:1、指针 2、容量  3、长度 ,由于slice 的底层结构依然是数组,所以操作的时候,不是操作slice的数据,而实际是操作底层数组的数据,所以得有指向该数组的指针,长度则表示当前slice的长度(非底层数组的长度),容量则表示从slice起始位置到底层数组的结束位置,注意此处是位置差,即表示能存放多少个元素。

创新互联公司主营黄埔网站建设的网络公司,主营网站建设方案,App定制开发,黄埔h5微信平台小程序开发搭建,黄埔网站营销推广欢迎黄埔等地区企业咨询

slice 的用法和array类似,但申明时,不指定数组的长度,如 var s []int,slice 通过len(s),cap(s)查看s的长度和容量

测试下:

main
main(){
   testArray =[]int {,,,,,,,,,}
   fmt.Println(testArray[:])
   fmt.Println(testArray[len(testArray)-])
   i,v:=testArray {
      fmt.Printf(,i,v)
   }
   s:=testArray[:]
   i1,v1:=s{
      fmt.Printf(,i1,v1)
   }
   fmt.Printf(,cap(s),len(s))
}
测试结果为:
[0 1 2 3]
9
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
0 3
1 4
2 5
3 6
4 7
the s cap's 7
the s len's 5
slice 倒序:
package main
import "fmt"
func main(){
   var testArray [10]int=[10]int {0,1,2,3,4,5,6,7,8,9}
   fmt.Println(testArray[0:4])
   fmt.Println(testArray[len(testArray)-1])
   for i,v:=range testArray {
      fmt.Printf("%d %d\n",i,v)
   }
   s:=testArray[3:8]
   for i1,v1:=range s{
      fmt.Printf("%d %d\n",i1,v1)
   }
   fmt.Printf("the s cap's %d\nthe s len's %d\n",cap(s),len(s))
   // reserse the slice
   fmt.Println("before reserse ",s)
   reserse(s)
   fmt.Println("after reserse",s)
}
func reserse(s []int){
   for i,j:=0,len(s)-1;i<j;i,j = i+1,j-1 {
      //for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
      s[i],s[j]=s[j],s[i]
   }
}
输出:
。。。
before reserse  [3 4 5 6 7]
after reserse [7 6 5 4 3]

检查slice是否为空的两种方式,直接和nil比较,还有一个是判断slice长度为空

testNil []int
testNil==nil {
   fmt.Println()
}
len(testNil)=={
   fmt.Println()
}

文章名称:golang之slice变长数组-创新互联
网页路径:https://www.cdcxhl.com/article6/phiig.html

成都网站建设公司_创新互联,为您提供网站内链App开发标签优化微信小程序动态网站企业网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设