Go 学习笔记 04 | 数组、切片

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

一、数组

数组长度指定之后,不可修改。[...] 会自行推断数组长度。

var arr = [...]int{1,2,4}

指定索引值来初始化数组。

arr := [...]int{0: 1, 1: 10, 2: 20, 5: 50}

输出:

[1 20 20 0 0 50]

基本数据类型和数组都是值类型,& 是引用类型。

二、切片

Golang 中申明切片之后,切片默认值就是 nil

len() 取长度,cap() 求切片的容量。

定义切片的时候,把数组长度去掉。

var arr []int

make() 创建一个切片,Golang 不能通过下标的方式给切片扩容,需要使用 append() 扩容。

append() 可以合并切片。

sliceA = append(sliceA, sliceB...)  //把 sliceB 合并到 sliceA 并赋值给 sliceA

扩容策略

  • 如果新申请的容量大于两倍的旧容量,最终容量就是新申请的容量。
  • 当需要的容量超过原容量的两倍时,会使用需要的容量作为新容量。
  • 当原切片长度小于 1024 时,新切片的容量会直接翻倍。而当原切片的容量大于等于 1024 时,会反复地增加 25%,直到新容量超过所需要的容量。
  • 如果最终容量计算值溢出,则最终容量就是新申请的容量。

copy() 函数

值类型,改变变量副本值不会影响变量本身的值。(数组、基本数据类型)

引用数据类型,改变变量副本值会影响变量本身的值。(切片)

copy(sliceB, sliceA)

Golang 没有删除切片元素的专用方法,可以使用切片本身特性删除元素。

a = append(a[:2], a[3:]...)

三、切片排序算法

sort 包排序

// 升序
sort.Ints(intList)
sort.Float64s(float8List)
sort.Strings(stringList)

// 降序
sort.Sort(sort.Reverse(sort.IntSlice(intList)))
sort.Sort(sort.Reverse(sort.Float64Slice(float8List)))
sort.Sort(sort.Reverse(sort.StringSlice(stringList)))

四、参考教程

Golang 教程 P17-P21


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

本文来自:简书

感谢作者:Wonz

查看原文:Go 学习笔记 04 | 数组、切片

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

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