Go - 切片(Slice)
定义
切片本身不是数组,它指向底层的数组或者数组的一部分。因此,可以使用Slice来处理变长数组的应用场景。 Silice 是一种引用类型。
1、定义一个空的Slice
package main import (
"fmt"
) func main() {
var slice1 []int //定义一个Slice, []里面什么也没有!!
fmt.Println(slice1)
}
2、 从数组中干获取Slice
func main() { arr := []int32{, , } // 定义一个数组
slice := arr[:len(arr)] //从数组中取得Slice,从0开始,取到结束
fmt.Println(slice)
} //output
[ ]
3、使用“make”关键字创建Slice
make([]T, len, cap)
[]T - 表示定义那种类型的Slice
len - 表示Slice的长度
cap - 表示Slice的容量;可以省略,即cap=len
s1 := make([]int, , )
fmt.Println(s1) //output
[0 0 ]
Slice与底层数组的关系图
通过关系图,我们可以得出: Slice_a 长度为3,容量为9, Slice_b 长度为2,容量为8
Reslice
有 Slice 再次生成的Slice。它的特点是:
1. 索引以Slice为准。
2. cap不能超过Slice
3. 索引越界不会从新分配内存,而是直接出错!!
a2 := []byte{'a', 'b', 'c', 'd', 'e'}
s2 := a2[:]
fmt.Println(len(s2), cap(s2)) // output 3, 5 s22 := s2[:]
fmt.Println(len(s22), cap(s22)) // output 2, 5
Append 函数
a3 := make([]int32, , )
fmt.Printf("%v, %p\n", a3, a3) a3 = append(a3, , )
fmt.Printf("%v, %p\n", a3, a3) a3 = append(a3, , )
fmt.Printf("%v, %p\n", a3, a3) //output
[ ], 0x114821d0
[ ], 0x114821d0
[ ], 0x11489c60
copy 函数
copy(src, dst) - 将dest的切片 copy 到 src, 以两者之中最短的切片长度为准。
a1 := []int32{, }
a2 := []int32{, , }
fmt.Println(a1) // output [1 2] copy(a1, a2)
fmt.Println(a1) // output [3 4] copy(a1[:], a2[:]) // // output [4 5]
fmt.Println(a1)
Go - 切片(Slice)的更多相关文章
- go 数组(array)、切片(slice)、map、结构体(struct)
一 数组(array) go语言中的数组是固定长度的.使用前必须指定数组长度. go语言中数组是值类型.如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址. 声明 ...
- golang切片slice
切片slice是引用类型 len()函数获取元素的个数 cap()获取数组的容量 1.申明方式 (1)var a []int 与数组不同的是他不申明长度(2)s2 := make([]int, 3, ...
- 在python&numpy中切片(slice)
在python&numpy中切片(slice) 上文说到了,词频的统计在数据挖掘中使用的频率很高,而切片的操作同样是如此.在从文本文件或数据库中读取数据后,需要对数据进行预处理的操作.此时就 ...
- Golang 入门 : 切片(slice)
切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数 append( ...
- Go 灵活多变的切片Slice
我们知道数组定义好之后其长度就无法再修改,但是,在实际开发过程中,有时候我们并不知道需要多大的数组,我们期望数组的长度是可变的, 在 Go 中有一种数据结构切片(Slice) 解决了这个问题,它是可变 ...
- 7 切片slice
include 切片 切片的日常用法 切片slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或者 为引用类型. 可以直接创建或从底层数组获取生成. 使用le ...
- go递归函数如何传递数组切片slice
数组切片slice这个东西看起来很美好,真正用起来会发现有诸多的不爽. 第一,数组.数组切片混淆不清,使用方式完全一样,有时候一些特性又完全不一样,搞不清原理很容易误使用. 第二,数组切片的appen ...
- [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()
线性结构的总结 列表list 元组tuple 字符串str bytes bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...
- Go语言【第十二篇】:Go数据结构之:切片(Slice)、范围(Range)、集合(Map)
Go语言切片(Slice) Go语言切片是对数组的抽象,Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数 ...
- go中的数据结构切片-slice
1.部分基本类型 go中的类型与c的相似,常用类型有一个特例:byte类型,即字节类型,长度为,默认值是0: bytes = []btye{'h', 'e', 'l', 'l', 'o'} 变量byt ...
随机推荐
- APUE学习笔记——6 系统数据文件与信息
1.用户口令:/etc/passwd文件 该文件中包含下列结构体信息.其中,当下主修熊passwd不再这里显示,是使用了一个占位符. struct passwd { char * pw_name; / ...
- python + sklearn ︱分类效果评估——acc、recall、F1、ROC、回归、距离
之前提到过聚类之后,聚类质量的评价: 聚类︱python实现 六大 分群质量评估指标(兰德系数.互信息.轮廓系数) R语言相关分类效果评估: R语言︱分类器的性能表现评价(混淆矩阵,准确率,召回率,F ...
- 服务上部署jmeter远程机
1.首先连接服务器 2.在/home下新创建一个自己的文件夹 ]#useradd zhuxiao ]#ls 显示新的用户并在home下创建zhuxiao文件夹 ①切换到用户zhuxiao目录下 ]#s ...
- java List 学习
要学习List<E>接口,首先,我知道它还有一个父接口Collection<E>.而Collection<E>又有一个超级接口Iterable<T>. ...
- python爬虫入门(5)-Scrapy概述
http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框 ...
- crm--01
需求: 将课程名称与班级综合起来 class ClassListConfig(ModelSatrk): # 自定义显示方式 def display_class(self,obj=None,is_hea ...
- 软件包 com.baidu.location
http://developer.baidu.com/map/loc_refer/index.html?com/baidu/location/package-summary.html
- VC dimension and Model complexity
可以把growth function m_H(N)的upper bound用N^(k-1)来限制, for N large, k>=3 Thus, 定义: VC Dimension: maxim ...
- 跳转后全屏,兼容大部分浏览器JavaScript
<!DOCTYPE html> <html> <head> <title>测试</title> </head> <body ...
- Ubuntu Kylin14.04下PHP环境的搭建(LAMP)
1.首先打开命令行,切换到root身份,获得最新的软件包 su root sudo apt-get install update 2.安装MySQL数据库 sudo apt-get install m ...