热门标签 | 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]
})


推荐阅读
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 开发笔记:由数据库某字段存数组引发的json_encode/serialize思考
    开发笔记:由数据库某字段存数组引发的json_encode/serialize思考 ... [详细]
  • 深入解析ArrayList与LinkedList的差异
    本文详细对比了Java中ArrayList和LinkedList两种常用集合类的特性、性能及适用场景,通过代码示例进行测试,并结合实际应用场景分析其优缺点。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 按照之前我对map的理解,map中的数据应该是有序二叉树的存储顺序,正常的遍历也应该是有序的遍历和输出,但实际试了一下,却发现并非如此,网上查了下,发现从Go1开始,遍历的起始节点就是随机了,当然随机 ... [详细]
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
  • 目录在Go语言项目中使用Zap日志库介绍默认的GoLogger日志库实现GoLogger设置Logger使用LoggerLogger的运行GoLogger的优势和劣势优势劣势Ube ... [详细]
  • Go冒泡排序练习
    package main要求:随机生成5个元素的数组,并使用冒泡排序对其排序  从小到大思路分析:随机数用mathrand生成为了更好 ... [详细]
  • Go 快速入门指南命令行参数
    命令行参数个数调用os包即可。获取参数个数,遍历参数packagemainimport(fmtos)funcmain(){fmt.Printf(Numberofargsi ... [详细]
  • 集成第三方库,自检测读取配置文件。文件读取,结构体定义,接口实现,错误返回,库解析,适合新同学练手。思路文件读取获取字节流文件类型分析,确定解析api集成第三方解析api管理器定义 ... [详细]
  • 小编给大家分享一下Golang端口复用测试的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
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社区 版权所有