Go:slice
一、切片创建方式
func main() {
// 创建切片方式1
// 让切片引用一个数组
array := [...]int{1, 2, 3, 4}
slice1 := array[1:3]
fmt.Println(slice1) // [2 3]
// 创建切片方式2
// 通过make方式创建切片
var slice2 []int // 这是切片定义,需要让其引用一个数组,或make一下才能使用!!!
slice2 = make([]int, 4)
fmt.Println(slice2) // [0 0 0 0]
var slice3 = make([]int, 4, 8) // 8为容量(cap),可选
fmt.Println(slice3) // [0 0 0 0]
slice4 := make([]string, 4)
fmt.Println(slice4) // [ ]
fmt.Println(cap(slice4)) // 4
// 创建切片方式3
// 定义一个切片,直接就指定具体数组,原理类似make方式
var slice5 = []float64{1.11, 2.22, 3.33}
slice6 := []string{"a", "b"}
fmt.Printf("%.1f\n", slice5) // [1.1 2.2 3.3]
fmt.Println(slice6) // [a b]
}
方式1与方式2的区别:
- 方式1是直接引用数组,这个数组是事先存在的,程序员是可操作的;
- 方式2是通过make来创建切片,make会创建一个数组,而切片就是引用这个数组,这个数组是由切片在底层进行维护,程序员不可操作。
二、切片的添加操作
func main() {
slice := []string{"a", "b"}
fmt.Println(slice) // [a b]
slice = append(slice, "c", "d")
fmt.Println(slice) // [a b c d]
slice = append(slice, slice...)
fmt.Println(slice) // [a b c d a b c d]
}
三、切片的拷贝操作
# 参数的数据类型都是切片
copy(param1, param2)
func main() {
slice1 := []int{1, 2, 3}
slice2 := make([]int, 5)
slice3 := make([]int, 2)
copy(slice2, slice1)
fmt.Println(slice2) // [1 2 3 0 0]
copy(slice3, slice1)
fmt.Println(slice3) // [1 2]
}
四、string与slice关系
string底层是一个byte数组,因此string也可以进行切片操作(这里不演示)。
string是不可变的,因此不能通过 str[0] = 'xx' 方式来修改字符串;如果需要修改字符串,可以先将 string 转成 []byte 或者 []rune 类型,修改后再转回。
func main() {
str := "Hello"
sli := []byte(str)
sli[0] = 'h'
fmt.Println(sli) // [104 101 108 108 111]
str = string(sli)
fmt.Println(str) // hello
// 推荐使用下面方式(支持中文)
s := []rune(str)
s[0] = '吖'
str = string(s)
fmt.Println(str) // 吖ello
}
Go:slice的更多相关文章
- JS截取字符串:slice(),substring()和substr()
var string='abcdefg' 1.slice() string.slice(startLocation [, endLocation]) ps1:2个参数可以为负数,若参数值为负数,则将该 ...
- golang:slice切片
一直对slice切片这个概念理解的不是太透彻,之前学习python的就没搞清楚,不过平时就用python写个工具啥的,也没把这个当回事去花时间解决. 最近使用go开发又遇到这个问题,于是打算彻底把这个 ...
- python函数回顾:slice()
描述 slice() 函数实现切片对象,主要用在切片操作函数里的参数传递. 语法 class slice(stop) class slice(start, stop[, step]) 参数说明: st ...
- 对Array.prototype.slice.call()方法的理解在看别人代码时,发现有这么个写法:[].slice.call(arguments, 0),这到底是什么意思呢?
1.基础 1)slice() 方法可从已有的数组中返回选定的元素. start:必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 指倒数第 ...
- python每日一类(4):slice
class slice(stop)class slice(start, stop[, step]) Return a slice object representing the set of indi ...
- JavaScript 数组操作:slice vs splice
在 JavaScript 中,对于数组的操作有两个很容易混淆的方法 splice, slice ,这里给大家推荐一篇介绍 splice, slice 二者区别的文章. In JavaScript, m ...
- Go基础系列:Go slice详解
slice表示切片(分片),例如对一个数组进行切片,取出数组中的一部分值.在现代编程语言中,slice(切片)几乎成为一种必备特性,它可以从一个数组(列表)中取出任意长度的子数组(列表),为操作数据结 ...
- python定制类(1):__getitem__和slice切片
python定制类(1):__getitem__和slice切片 1.__getitem__的简单用法: 当一个类中定义了__getitem__方法,那么它的实例对象便拥有了通过下标来索引的能力. c ...
- Tensorflow学习笔记(1):tf.slice()函数使用
tensorflow 当中的一个常用函数:Slice() def slice(input_, begin, size, name=None) 函数的功能是根据begin和size指定获取input的部 ...
随机推荐
- PHP中foreach有关引用的问题
软件开发的过程中,细节处理非常重要,说得大一点就是细节决定成败,别人不懂的地方,你懂,别人没注意到的细节,你注意到了,这就是你胜出对方的地方,这样就体现出了你的价值. 下面是几个foreach循环中引 ...
- bzoj 3676: [Apio2014]回文串【后缀自动机+manacher】
用manacher找出本质不同的回文子串放在SAM上跑 #include<iostream> #include<cstdio> #include<cstring> ...
- spring boot启动报错Error starting ApplicationContext(未能配置数据源)
主要错误:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource c ...
- win7/8系统中php5.3和5.4、5.5不能加载php_curl.dll解决办法
win7/8系统中php5.3和5.4.5.5不能加载php_curl.dll解决办法 作者:用户 来源:互联网 时间:2016-06-23 18:54:33 php变量注释系统模块 摘要: 本文 ...
- 状压DP+记忆化搜索 UVA 1252 Twenty Questions
题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...
- 题解报告:hdu1219AC Me
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1219 Problem Description Ignatius is doing his homewo ...
- for循环的阶乘
方法一: long sum=0; long num=1; for (long i = 1; i <=20; i++) { for(long j=i;j>0;j--){ num=num*j; ...
- google breakpad 使用初步总结
项目地址:https://code.google.com/p/google-breakpad/ 访问不了请挂VPN 这是一个由google主导的开源项目,官方介绍为:An open-source ...
- ASP.NET MVC+Bootstrap个人博客之修复UEditor编辑时Bug(四)
我的个人博客站在使用百度富文本编辑器UEditor修改文章时,遇到了一些问题,(不知是bug,还是我没有配置好).但总算找到了解决方法,在此记录下来. 遇到的问题: 正常来讲,进入文章修改页,只需将U ...
- AJPFX简述java语言现状和发展
作为一种最流行的网络编程语言之一,java语言在当今信息化社会中发挥了 重要的作用.Java语言具有面向对象.跨平台.安全性.多线程等特点,这使得java成为许多应用系统的理想开发语言.java应用在 ...