文档章节

GO 切片(slice)相关语法

汤汤圆圆
 汤汤圆圆
发布于 2018/09/19 22:35
字数 674
阅读 32
收藏 0
Go
package main

import(
	"fmt"
)

func main() {
	var intArr [5]int = [...]int{1,2,3,4,5} //定义一个数组
	slice := intArr[2:4] //第二个(包含)下标到第四个下标(不包含)

	fmt.Println("slice = ", slice) //[3 4]
	fmt.Println("slice len = ", len(slice)) 
	fmt.Println("slice cap = ", cap(slice)) //切片的容量

	//通过make创建切片
	var makeSlice []int = make([]int, 2, 5)//第一个参数为类型, 第二个参数为len, 第三个为cap
	fmt.Println("makeSlice = ", makeSlice) //数字类型(int, float)默认为0, sting 为'', bool为false  和数组一样
	fmt.Println("makeSlice len = ", len(makeSlice))
	fmt.Println("makeSlice cap = ", cap(makeSlice))

	//类似于make
	var mslice []string = []string{"zhangsan", "lisi", "wangwu", ""}
	mslice[3] = "ermazi"
	fmt.Println("mslice = ", mslice)
	fmt.Println("mslice len = ", len(mslice))
	fmt.Println("mslice cap = ", cap(mslice))

	//遍历
	for i:=0; i < len(mslice); i++ {
		fmt.Printf("i = %v, v = %v\n", i, mslice[i])
	}

	for j,mv := range mslice {
		fmt.Printf("j = %v, mv = %v\n", j, mv)
	}

	//细节
	var testArr [5]int = [...]int{1,2,3,4,5}
	testSlice := testArr[0:len(testArr)] //取出数组里面所有值 testArr[:]可以简写成这样
	startSlice := testArr[:4] //从0开始到第四个下标
	endSlice := testArr[2:] // 从2开始到结束

	testSlice2 := startSlice[1:3]//slice也可以从slice种切,和数组的规则一样
	testSlice[2] = 100 //slice 是引用,更改了值都会影响其它关联的指向变量的值(testArr, starSlice对应的都改变了)

	fmt.Println("testArr = ", testArr)
	fmt.Println("testSlice = ", testSlice)
	fmt.Println("testSlice2 = ", testSlice2)
	fmt.Println("endSlice = ", endSlice) //testArr的值改变了;它也得改变

	//append,copy的使用
	var apSlice []int  = make([]int, 5, 10)
	apSlice = append(apSlice, 1, 2, 3, 4, 5) //追加元素
	fmt.Println("apSlice = ", apSlice) //[0 0 0 0 0 1 2 3 4 5]

	apSlice = append(apSlice, apSlice...)//也可以追加一个slice
	fmt.Println("apSlice = ", apSlice) // [0 0 0 0 0 1 2 3 4 5 0 0 0 0 0 1 2 3 4 5]

	var coppySlice []string = []string{"zhangsan", "lisi", "wangwu"}
	var dslice []string = make([]string, 3, 3)
	copy(dslice, coppySlice) //把copySlice的值拷贝到dslice种
	fmt.Println("dslice = ", dslice)//[zhangsan lisi wangwu]

	var minSlice []string = make([]string, 1, 1)//只有一个长度
	copy(minSlice, coppySlice) //此时不会出现越界的错误,只是拷贝了一个值
	fmt.Println("minSlice = ", minSlice)//[zhangsan]

	//字符串底层是一个byte数组,所以可以通过slice来操作
	str := "hello,gogogo"
	strSlice := str[2:6] //这个返回的string,感觉应该是slice
	fmt.Printf("strSlice = %v, %T\n", strSlice, strSlice)

	arr := []byte(str) //string 转换成byte切片
	fmt.Printf("arr = %v, %T\n", arr, arr)
	arr[0] = 'H'
	//arr[1] = '我' //中文会报错
	str = string(arr[:]) //[]byte切片转换成字符串
	fmt.Println(str) //Hello,gogogo

	//通过[]rune切片解决中文
	arr2 := []rune(str)
	arr2[1] = '我'
	str = string(arr2)
	fmt.Println(str) //H我llo,gogogo

	//练习 斐波那契
	fmt.Println(test(8)) //[1 1 2 3 5 8 13 21]
}

func test(n int) []uint64 {
	var slice []uint64 = make([]uint64, n)
	for i := 0; i < n; i++ {
		if i <= 1 {
			slice[i] = 1
		} else {
			num := slice[i-1] + slice [i-2]
			slice[i] = num
		}
	}
	return slice
}

© 著作权归作者所有

汤汤圆圆

汤汤圆圆

粉丝 11
博文 82
码字总数 26104
作品 0
昌平
程序员
私信 提问
Go 语言初级教程之六[基本类型]

基本类型 像C语言一样,Go提供了一系列的基本类型,常见的布尔,整数和浮点数类型都具备。它有一个Unicode的字符串类型 和数组类型。同时该语言还引入了两 种新的类型:slice 和map。 数组和...

刘赤龙
2010/06/08
153
0
Go中复合数据类型的字面量语法抽象

Go语言中有多种复合数据,如:数组、切片、map、结构体 等等,它们也都有字面量写法,而且也很接近,初学者容易弄混淆,为了方便理解和记忆,我把这些类型的字面量写法抽象为了一个语法,即:...

科研者
02/26
0
0
Go基础编程:复合类型—切片slice

1. 概述 数组的长度在定义之后无法再次修改;数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法完全满足开发者的真实需求。Go语言提供了数组切片(slice)来弥补数组的不足。 ...

tennysonsky
2017/12/13
0
0
Go语言备忘录(1):基本数据结构

本文内容是本人对Go语言的变量、常量、数组、切片、映射、结构体的备忘录,记录了关键的相关知识点,以供翻查。 文中如有错误的地方请大家指出,以免误导!转摘本文也请注明出处:Go语言备忘...

nothingfinal
2018/04/01
0
0
Go 切片 (slice):用法和本质

Go的切片类型为处理同类型数据序列提供一个方便而高效的方式。 切片有些类似于其他语言中的数组,但是有一些不同寻常的特性。 数组 Go的切片是在数组之上的抽象数据类型,因此在了解切片之前...

雪落青山
2018/10/10
28
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部