热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

七、Golang之切片(slice)

七、Golang之切片(slice)-由于数组的长度是固定的,所以有很多的局限性,所以今天讲切片,切片是一个拥有相同类型且长度可变的有序集合,切片和数组两种不同的数据类型,它是基于

由于数组的长度是固定的,所以有很多的局限性,所以今天讲切片,切片是一个拥有相同类型且长度可变的有序集合,切片和数组两种不同的数据类型,它是基于数组进行了封装,可扩容

切片的定义

var list []int
//初始化
var list = []int{}
//初始化赋值
var list  = []int{1,2,3}

切片的长度和容量

求切片的长度和容量使用len()方法和cap()方法

使用make 方法初始化切片

make([]T, size, cap)
//申明且初始化一个 长度为5,容量为10,值类型为string 的切片
var list = make([]string,5,10)

切片的拷贝

`直接赋值的两个切片共享的是一个底层数组,修改一个,另一个的值也会改变,如下:`
var list1 = make([]int,3)
list2:=list1
list2[0]=100
fmt.Println(list1)
//[100,0,0]

切片是引用数据类型两个切片指向同一个指针,copy是内置的方法,所以我们使用copy方法来进行切片的拷贝,它可以讲一个切片内容快速拷贝到另一个空间 copy(目标,来源)

var list1 = []int{1,2,3,4,5}
var list2 = make([]int,5)
copy(list2,list1)
list2[0] = 100
fmt.Println(list1) //[1,2,3,4,5]
fmt.Println(list2) //[100,2,3,4,5]

切片的遍历

切片的遍历和数组一样可以使用for 循环

//第一种
var list = []int{1,2,3,4,5}
for i:=0;i<len(list);i++{
    fmt.Println(list[i])
}
//第二种 for range
 for index,value := range list{
     fmt.Println(index,value)
 }

切片添加元素

go内置的append方法可以给切片添加元素

var list []int
list = append(list,1) //[1]

//也可以追加多个元素
list = append(list,1,2,3,4,5) //[1,1,2,3,4,5]

//追加多个另一个切片
var list2 = []int{6,7,8}
list = append(list,list2...) //[1,1,2,3,4,5,6,7,8]

注意:通过var 关键字声明的切片不用初始化也可以使用append

切片删除元素

golang中并没有提供此方法 但是可以根据特性自己去实现

var list = []int{1,2,3,4,5,6}
//删除索引为3的元素
list = append(list[0:3],[3:]...) //[1,2,3,5,6]

要从切片a中删除索引为index的元素,操作方法是a = append(a[:index], a[index+1:]...)

排序

var list = []int{3,4,2,1,5}
var list2 = []string{"d","v","a"}
//正序
sort.Ints(list)
sort.Strings(list2)
//倒序
sort.Sort(sort.Reverse(sort.IntSlice(list)))
sort.Sort(sort.Reverse(sort.StringSlice(list2)))

//或者使用sort.slice 自定义排序
sort.Slice(a, func(i, j int) bool {
  return a[i] > a[j]
})


推荐阅读
  • 千万不要错过的后端[纯干货]面试知识点整理 I I
    千万不要错过的后端【纯干货】面试知识点整理IIc++内存管理上次分享整理的面试知识点I,今天我们来继续分享面试知识点整理IIlinuxkernel内核空间、内存管理、进程管理设备、 ... [详细]
  • 认真一点学 Go:18. 并发
    收录于《Go基础系列》,作者:潇洒哥老苗。>>原文链接学到什么并发与并行的区别?什么是Goroutine?什么是通道?Goroutine如何通信?相关函数的使用?sel ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
  • 本文主要分享【go协程模型】,技术文章【【GORM】模型关系-HasOne】为【VivaPython】投稿,如果你遇到GoWeb相关问题,本文相关知识或能到你。go协程模型一、概述HasO ... [详细]
  • 目录在Go语言项目中使用Zap日志库介绍默认的GoLogger日志库实现GoLogger设置Logger使用LoggerLogger的运行GoLogger的优势和劣势优势劣势Ube ... [详细]
author-avatar
智颢Tannerfm_937
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有