热门标签 | 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内核空间、内存管理、进程管理设备、 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 认真一点学 Go:18. 并发
    收录于《Go基础系列》,作者:潇洒哥老苗。>>原文链接学到什么并发与并行的区别?什么是Goroutine?什么是通道?Goroutine如何通信?相关函数的使用?sel ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 遇到的问题golang对于基本类型初始化的处理,是自动给基本类型赋值为默认值。比如:variint在这里如果不对i做任何赋值,那么i的值为零这个特性在很多地方能够避免访问到未初始化 ... [详细]
  • funcReadXlsx(c[]CmdbTest,SheetNamestring)error{打开文件,如果文件不存在创建,存在就打开path:.cm ... [详细]
  • 本文主要分享【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社区 版权所有