8

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

 3 years ago
source link: https://studygolang.com/articles/31688
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、数组

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

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

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

eUjI7rn.png!mobile

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK