go slice

wangguoyang429883793 · · 1707 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1.前言

转载请注明出处http://blog.csdn.net/wangguoyang429883793/article/details/50275401

游戏开始选人 -random

2.实战

1.定义:

slice:在很多应用场景中,数组并不能满足我们的需求。在初始定义数组时,我们并不知道需要多大的数组,因此我们就需要“动态数组”。在Go里面这种数据结构叫,slice.

2.初始化:

  • 直接初始化:
slice := []int{1,2,3} //和数组的初始化基本相同,只是去掉了长度。
  • 从数组或slice初始化:
arr := [5]int{1,2,3,4,5}
aslice := arr[:3] // 0-3 包含: arr[0],arr[1],arr[2]
bslice := arr[3:] // 3-5 包含: arr[3],arr[4]
cslice := arr[:]  // 0-5 包含: arr[0],arr[1],arr[2],arr[3],arr[4]

dslice := cslice[1:3] //从slice初始化
  • make初始化:
slice := make([]int, 5, 5) 
// 参数: 1.slice的类型,2.len 长度,3.cap容量(len和cap的区别在下面说)

3.方法:

  • 增加元素 append:
slice  := make([]int, 5, 5) //初始化
aslice := append(slice, 6)  // 一个
bslice := append(slice,7,8) // 多个
  • 值的变化

    • 理解:len是真实长度 cap是最大容量

这里写图片描述

  • len < cap 会改变旧值
package main

import (
    . "fmt"
)

func main() {
    slice := make([]int, 5, 8)
    aslice := append(slice, 6)
    aslice[0] = 10
    Printf("slice = %v  \n aslice=  %v", slice[0], aslice[0])
}

结果:

slice = 10  
aslice=  10成功: 进程退出代码 0.

说明:
增加一个元素,len < cap aslice[0]的改变会导致slice[0]的改变。因为slice还没有达到cap

  • 当增加后的len > cap时,不会改变旧值
package main

import (
    . "fmt"
)

func main() {
    slice := make([]int, 5, 8)
    aslice := append(slice, 6, 7, 8, 9)
    aslice[0] = 10
    Printf("slice = %v  \n aslice=  %v", slice[0], aslice[0])
}

结果:

slice = 0  
aslice=  10成功: 进程退出代码 0.

说明:
slice[0]的值并没有因为aslice[0]的改变而改变。
此时将动态分配新的数组空间。返回的slice数组指针将指向这个空间,而原数组的内容将保持不变;其它引用此数组的slice则不受影响。

  • 其他方法:

    • len 获取slice的长度
    • cap 获取slice的最大容量
    • append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
    • copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数

3.总结

比赛结束,加分。 欢迎批评,吐槽,点赞,留言。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:wangguoyang429883793

查看原文:go slice

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1707 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传