广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Go(3[切片])
  • 418
分享到

Go(3[切片])

切片 2023-01-31 07:01:13 418人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

切片:切片底层都是数组切片是一个指针类型,是数组的引用!修改切片后的值,那原来的数据也会改变传输数据大的时候,使用切片,节省内存,因为底层只是对数组的引用append操作的适合,如果长度超过设置的长度,那底层就会把底层元组进行扩容切片里面可

切片:

  • 切片底层都是数组

  • 切片是一个指针类型,是数组的引用!

  • 修改切片后的值,那原来的数据也会改变

  • 传输数据大的时候,使用切片,节省内存,因为底层只是对数组的引用

  • append操作的适合,如果长度超过设置的长度,那底层就会把底层元组进行扩容

  • 切片里面可以放任何类型!!!

切片初始化:

    var b[]int = []int{1,2,3,4,5}

  • 切片底层都是数组

  • 切片是一个指针类型,应用类型,是数组的引用!!!

  • 修改切片后的值,那原来的数据也会改变

  • 如果传输的内容过大,介意用切片,节省内存

切片定义(代码):

    切片是数组的引用,所以先创建一个数组

    var a [5]int

    var b[]int = a[0:2]       b是切片    

伪代码定义:

    a[start:end]

示例

  1. 示例一: 循环数组

    1. 时刻记住Go是强类型语言,变量后面需要指定类型

    2. func Sum(a [100]int)int  {
         c:=0
         for i:=0;i<len(a);i++{
            c += a[i]
         }
         return c
      }


  2. 示例二:循环切片

    1. 其实与循环数组方式一样

    2. 需要注意是传参的时候,需要把数组转化为切片

      1. var c[1000] int  转化为切片就是 c[:]

    3. func Sum2(a []int)int  {
         c:=0
         for i:=0;i<len(a);i++{
            c += a[i]
         }
         return c
      }


字符串切片:

//一个bytes占一个字节  一个字节是8位
//一个字符--》有可能占一个字节,或者三个字节
//一个中文,占3个字节

字符串底层是bytes的切片,   是用指针指向utf-8字节数组!!

字符串是只读的!!,所以需要把字符串转切片,然后在修改字符串,那就相当于开辟一块新的内存空间

修改字符串,可将其转化成【】rune或[]bytes ,完成后在转化为string ,无论哪种方式,都会重新分配内存,并复制字节数组

var str = "hello Word"
//把字符串转切片,然后在修改字符串
str1 := str[:]
fmt.Printf("%s\n",str1)
//单引号是代表一个字符
var b []byte = []byte(str)
//通过下标重新赋值
b[0] = 'a'
str2 := string(b)
fmt.Println(str2,len(b))

示例一:

func testRever()  {
   //英文反转
   var str = "hello word"
   var b []byte = []byte(str)
   for i:=0;i< len(b) /2 ;i++{
      b[i] = b[len(b) -i -1]
      b[len(b) -i -1] = b[i]

   }
   str2 := string(b)
   fmt.Println(str2,len(b))
}

实例二:

中文操作:rune 

func testChina()  {
   //带中文的反转
   str :="Hi  我爱晨红"
   //rune 可能占一个字节或者多个字节
   b :=[]rune(str)
   fmt.Println("testChina",len(str),len(b))
   for i:=0;i< len(b) /2 ;i++{
      b[i],b[len(b) -i -1] = b[len(b) -i -1],b[i]
   }
   str2 := string(b)
   fmt.Println("testChina",str2)
}
func testConetChine()  {
   //统计中文,和英文出现的次数
   str :="翟hello,worker"
   b :=[]rune(str)
   fmt.Println("testChina",len(str),len(b))
}

>>>>testChina 17 13

得出!!当统计类型为字符串的适合,它会把每个值都当成一个字节来统计

    转换rune后,那统计rune后的值,长度就变化了

实例三:

func testConetChine()  {
   //统计中文,和英文出现的次数
   str :="哈哈哈哈测试,hello,worker"
   b :=[]rune(str)
   fmt.Println("testChina",len(b),len(str))

}

切片的创建:

  1. 第一种定义方式:定义切片的时候.默认是空 nil

    1. var a[]int
      a = append(a,1,2,3,7,8)
      fmt.Printf("%#v\n",a)
  2. 第二种定义方式:用make的时候,切片内容默认都是0,底层是有数据的
    1. a=make([]int,5)
      a = append(a,1,2,3,7,8)
      fmt.Printf("%#v\n",a)
  • 切片只能用make来创建

  • 底层还是数组,是make来创建的

  • //容量扩容原理

    • 示例:

      • func testSliceCap()  {
        
           //a切片长度为5,容量为10,那底层数组长度就是10
           //那b 可以在a的基础上扩容, 但是不能超容量10
           a := make([]int,5,10)
           a[4] = 100
           //容量是从1开始,所以现在 b:=a[1:3] 的容量是9
           b:=a[1:3]
           //b[9] = 100
        
           fmt.Printf("a=%#v\n",a)
           fmt.Printf("b=%#v\n",b)
           //cap 内置方法 求出切片的容量7
           fmt.Println(cap(a),cap(b))
        }

切片Copy:

    copy(目标切片,源切片) 

  1. 打印内存地址参数:p

  2. cap 切片容量

s1 :=[]int{1,2,3}
s2 :=make([]int,10)
copy(s2,s1)
fmt.Println("\n",s1)
fmt.Println("\n",s2,cap(s2))

>------
 [1 2 3]

 [1 2 3 0 0 0 0 0 0 0] 10

切片Append:


定义切片: s3 :=[]int{1,2,3}

s4:=append(s3,3,4,5,6)


数组 / 切片 中的 ... 使用

数组:

func testArray()  {
   var a [5]int = [5]int{1,3}
   fmt.Println(a)
   //数组的...  是系统内部帮你计算,当你不知道有多少个的时候,那就用...
   var c  = [...]int{1,3,4}
   fmt.Println(c)
}

切片:

2个切片的append

//... 就是展开切片的意思

a = make([]int,5)
var b[] = []int{1,3,6,10}
a = append(a,b...)



--结束END--

本文标题: Go(3[切片])

本文链接: https://www.lsjlt.com/news/191288.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go(3[切片])
    切片:切片底层都是数组切片是一个指针类型,是数组的引用!修改切片后的值,那原来的数据也会改变传输数据大的时候,使用切片,节省内存,因为底层只是对数组的引用append操作的适合,如果长度超过设置的长度,那底层就会把底层元组进行扩容切片里面可...
    99+
    2023-01-31
    切片
  • Go 切片
    切片 一、切片(slice)概念 在讲解切片(slice)之前,大家思考一下数组有什么问题? 数组定义完,长度是固定的。例如: var num [5]int = [5]int{1,2,3,4,5} 定义的num数组长度是5,表示只能存储5个...
    99+
    2023-08-30
    golang 开发语言
  • Go基础系列:Go切片(分片)slice详解
    slice表示切片(分片),例如对一个数组进行切片,取出数组中的一部分值。在现代编程语言中,slice(切片)几乎成为一种必备特性,它可以从一个数组(列表)中取出任意长度的子数组(列...
    99+
    2022-11-13
  • Go中的nil切片和空切片区别详解
    Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 ...
    99+
    2022-06-07
    nil GO
  • Go语言--切片(Slice)详解
    目录一、定义切片1、声明一个未指定大小的数组来定义切片2、使用make()函数来创建切片二、切片是可索引的1、len() 和 cap() 函数三、切片截取四、增加切片的容量说明: ...
    99+
    2022-11-12
  • go语言切片是什么
    go语言切片是对数组的一种抽象。切片是对数组的引用,包含了指向数组元素的指针、切片的长度和容量。创建切片的方式有:1、使用内置的make函数创建一个切片;2、使用切片的字面量创建一个切片;3、从另一个切片创建新的切片。可以使用内置的appe...
    99+
    2023-12-11
    Golang go语言
  • Go切片slice实例分析
    本文小编为大家详细介绍“Go切片slice实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go切片slice实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。slice表示切片(分片),例如对一个数组...
    99+
    2023-06-30
  • Go slice切片如何使用
    这篇文章主要介绍“Go slice切片如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go slice切片如何使用”文章能帮助大家解决问题。定义切片区别于数组,是引用类型,...
    99+
    2023-07-02
  • go语言切片怎么生成
    本篇内容介绍了“go语言切片怎么生成”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在go语言中,切片(slice)是对数组的一个连续片段的引...
    99+
    2023-07-04
  • go的切片扩容机制详解
    切片的扩容策略?如何扩容? 扩容策略:如果切片的容量小于 1024 个元素,于是扩容的时候就翻倍增加容量。总容量从原来的1个翻倍到现在的2个。 一旦元素个数超过 1024 个元素,那...
    99+
    2023-05-14
    go 切片扩容
  • 聊聊go语言中的切片(slice)
    本篇文章带大家了解一下golang中可变长度的"数组"——切片(slice),希望对大家有所帮助!golang切片(slice)(1)切片的定义切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做...
    99+
    2022-07-04
    go语言 golang 切片
  • Go数组与切片轻松掌握
    目录数组(array)初始化数组数组赋值遍历数组数组对比切片(slice)切片的性质切片初始化切片赋值切片的容量append以及扩容在 Go 中,数组和切片的功能其实是类似的,都是用...
    99+
    2022-11-21
    Go 数组 切片 Go语言数组 Go语言切片
  • Go语言copy()实现切片复制
    Go语言的内置函数 copy() 可以将一个数组切片复制到另一个数组切片中,如果加入的两个数组切片不一样大,就会按照其中较小的那个数组切片的元素个数进行复制。 copy() 函数的使...
    99+
    2023-05-14
    Go 切片复制 Go copy()
  • Go语言切片支持多维吗
    这篇文章主要介绍“Go语言切片支持多维吗”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言切片支持多维吗”文章能帮助大家解决问题。可以。Go语言的切片是支持多维的,声明一个多维切片的语法格式“v...
    99+
    2023-07-05
  • go语言中切片如何加元素
    这篇文章主要介绍“go语言中切片如何加元素”,在日常操作中,相信很多人在go语言中切片如何加元素问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言中切片如何加元素”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-05
  • go语言中的二维切片赋值
    先用append填充一维的,然后将一维append到二维 代码如下 var a [][]int for i := 0; i < 10; i++ { var t...
    99+
    2022-06-07
    GO 二维 赋值 go语言
  • 浅谈Go数组比切片好在哪
    目录数组是什么切片是什么数组的优势可比较编译安全长度是类型规划内存布局访问速度总结参考前段时间有播放一条快讯,就是 Go1.17 会正式支持切片(Slice)转换到数据(Array)...
    99+
    2022-11-12
  • go的切片扩容机制是什么
    本篇内容主要讲解“go的切片扩容机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go的切片扩容机制是什么”吧!切片的扩容策略?如何扩容?扩容策略:如果切片的容量小于 1024 个元素,于...
    99+
    2023-07-05
  • Go语言切片是怎么扩容的
    本篇内容主要讲解“Go语言切片是怎么扩容的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言切片是怎么扩容的”吧!在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。切片是一...
    99+
    2023-07-06
  • Go语言里切片slice的用法介绍
    1.切片是基于数组做的一层封装,灵活能够自动扩容。 2.切片的初始化方法 ①直接创建 ②基于已有的数组或切片 ③使用make来创建一个切片 第一个5是切片的大小 第二个5是切片...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作