终于掌握append为切片添加元素的诀窍 切片动态增长看这里

简介: 终于掌握append为切片添加元素的诀窍 切片动态增长看这里

append()方法是为切片动态添加元素的常用方式。合理利用 append 可以极大地提高切片的便利性,实现动态增长数组的效果。

本文将详细介绍 append 的定义规范、切片扩容机制、append 多个元素、copy 与 append 结合使用等,并辅以具体代码示例,以帮助读者全面掌握 append 为切片添加元素的各种用法。

1

 

一、append 方法

append 方法的定义是:

func append(slice []T, elems ...T) []T

它可以为切片动态添加一个或多个元素。

2

 

二、切片扩容

当切片容量不够时,append 会自动扩容:

slice := []int{1, 2}
slice = append(slice, 3) // 触发扩容

这让切片可以动态增长,不需要手动扩容。

3

 

三、一次 append 多个

append 支持同时追加多个元素:

slice = append(slice, 1, 2, 3)

这样可以避免多次调用带来的性能损耗。

4

 

四、扩容策略

当超过 1024 个元素时,扩容变成 1.25 倍,否则是 2 倍。

func main() {
  slice := make([]int, 0, 1)
  // 起始len=0, cap=1
  for i := 0; i < 1024; i++ {
    slice = append(slice, i)
  }
  // len=1024, cap=1024
  fmt.Println(len(slice), cap(slice)) 
  // 1024 1024
  slice = append(slice, 2048)
  // 超过1024个元素,cap变成1.25倍
  fmt.Println(len(slice), cap(slice))
  // 1025 1280
}

这个示例中,起始切片容量为 1。当元素个数达到 1024 时,容量也是 1024。当再次 append 时,由于元素超过 1024,容量变成了 1280,也就是 1.25 倍。如果不足 1024 时,扩容策略是 2 倍容量。

5

 

五、与 copy 结合

可以通过 copy 使切片扩容后拷贝原数据:

func ExpandSlice(slice []int) []int {
  newSlice := append(slice, 0)
  copy(newSlice, slice)
  return newSlice 
}

这在修改切片时保留原数据很有用。

6

 

六、 append 初始化切片

append 一个 nil 切片将初始化切片:

var slice []int
slice = append(slice, 1)

7

 

总结

append 为切片添加元素非常高效方便,合理利用可以大大提升切片编程效率。


目录
相关文章
|
存储 容器
List,linkeedlist集合介绍,特点,二者区别,增长因子,去重复
List,linkeedlist集合介绍,特点,二者区别,增长因子,去重复
|
6月前
|
存储 Java API
Java数组元素的填充与替换技术详解
Java数组元素的填充与替换技术详解
67 1
|
6月前
|
索引 Python
索引、切片和迭代
【5月更文挑战第6天】 索引、切片和迭代。
30 1
|
6月前
【全网最简短代码】筛选出新数组中和旧数组的重复项,并和旧数组合并(往数组追加新的数据对象且去重,合并两个数组不重复数据)
【全网最简短代码】筛选出新数组中和旧数组的重复项,并和旧数组合并(往数组追加新的数据对象且去重,合并两个数组不重复数据)
|
存储 C#
C#视频—浅谈数组与集合的差别
C#视频—浅谈数组与集合的差别
|
存储 索引 Python
Python列表操作指南:索引、切片、遍历与综合应用
Python列表操作指南:索引、切片、遍历与综合应用
286 0
重生之我是孔乙己——查找数组缺失元素的几种方法
重生之我是孔乙己——查找数组缺失元素的几种方法
79 0
|
程序员 Go 开发者
使用切片的区别分析|学习笔记
快速学习使用切片的区别分析。
113 0
使用切片的区别分析|学习笔记
|
机器学习/深度学习 人工智能 开发者
Numoy 数组切片、迭代|学习笔记
快速学习 Numoy 数组切片、迭代
143 0
Numoy 数组切片、迭代|学习笔记
|
程序员 Go 开发者
使用切片的三种方式|学习笔记
快速学习使用切片的三种方式。
168 0
使用切片的三种方式|学习笔记