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的部 ...
随机推荐
- Android系统中setprop,getprop,watchprops命令的使用(转载)
转自:http://blog.csdn.net/yao_guet/article/details/6531241 在android系统中,有一些初始化的配置文件,例如: /init.rc /defau ...
- spring 获取配置文件的值
Spring 获取配置文件的值 package com.hafiz.www.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; ...
- hdu 1025 Constructing Roads In JGShining's Kingdom
本题明白题意以后,就可以看出是让求最长上升子序列,但是不知道最长上升子序列的算法,用了很多YY的方法去做,最后还是超时, 因为普通算法时间复杂度为O(n*2),去搜了题解,学习了一下,感觉不错,拿出来 ...
- jmeter(五)集合点
集合点: 简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,每到输入用户名和密码登录时,所有的虚拟 ...
- 449 Serialize and Deserialize BST 序列化和反序列化二叉搜索树
详见:https://leetcode.com/problems/serialize-and-deserialize-bst/description/ C++: /** * Definition fo ...
- JavaScript实现JQuery的功能
- T4870 水灾(sliker.cpp/c/pas) 1000MS 64MB
题目描述 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表 ...
- git---安装及配置
git官网:https://git-scm.com 安装: 官网下载->一路Next->安装完成 配置git: 1.win+r进入windows命令行 2.注册: git config - ...
- .net mvc 运行监控和错误捕捉
方法类 /// <summary> /// 运行监控类 /// </summary> [AttributeUsage(AttributeTargets.Class | Attr ...
- 最全的Java面试宝典
一. 前言部分 从享受生活的角度上来说:“程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使有可以做的工作但是你非常不愿意去做:第二,你非常痴 ...