24_切片的使用

Posted zhaopp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了24_切片的使用相关的知识,希望对你有一定的参考价值。

1、切片的底层是一个数组,但是切片传递是地址传递

2、切片不是数据类型,而是一个数据结构

3、slice通常写成[]T,其中元素的类型都是T;它看上去像没有长度的数组
4、slice有三个属性:指针、长度和容量

5、一个底层数组可以对应多个slice,这些slice可以引用数组的任意位置,彼此之间的元素还可以重叠

package main

import "fmt"

func main() 
	//[low:high:max]  len()=high-low  cap=max-low
	a := []int1, 2, 3, 4, 5
	fmt.Println("len(a):", len(a), "cap(a):", cap(a))
	b := a[1:2:4]
	fmt.Println("len(b):", len(b), "cap(b):", cap(b)) //len(b): 1 cap(b): 3

	//[:high:max]
	c := a[:2:3]
	fmt.Println("len(c):", len(c), "cap(c):", cap(c))
	fmt.Println(c[1]) //[1 2],容量是3,但是可以添加值,这个地址没有值
	//fmt.Println(c[1])// index out of range

	//[low::max]
	//	d :=a[2::5]//middle index required in 3-index slice,及不能缺少中间参数
	//	fmt.Println("len(d):", len(d), "cap(d):", cap(d))

	//[low:]
	d := a[2:]
	fmt.Println("len(d):", len(d), "cap(d):", cap(d)) //len(d): 3 cap(d): 3

	//[:high]  这时的cap是整个底层数组的大小
	e := a[:2]
	fmt.Println("len(e):", len(e), "cap(e):", cap(e)) //len(e): 2 cap(e): 5
	e = append(e, 3)                                  //在e切片后面追加3

	s1 := a[1:3] //s1: [2 3]
	fmt.Println("s1:", s1)
	s2 := s1[1:4] //s2: [3 4 5] 由此可以看出,切片都是操作的底层数组,不是一个部分切片
	fmt.Println("s2:", s2)
	s2[2] = 66 //把底层数组也改变了

	fmt.Println("a:", a) //a: [1 2 3 4 66]


运行结果:
    

                    技术图片

 

以上是关于24_切片的使用的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 使用切片和整数索引选择列

Golang basic_leaming2 语言容器

Golang basic_leaming2 语言容器

如何使用通过 XCode5 资产目录的切片工具切片的图像

带有迭代的 Pandas DataFrame 切片

带有 2D 切片的 numpy 视图