热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Golang四大数据类型二:数组类型

数组数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。1.声明方法[32]byte长度为32的数组[2


数组


数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。


1. 声明方法


[32]byte //长度为32的数组
[2*N] struct {x, y int32} //复杂类型数组
[100]*float64 //指针数组
[3][5]int //二维数组
[2][2][2]float64 //等同于[2]([2]([2]float64))

数组的长度在声明时就已经确定,后面不能再次修改。可以使用 len() 函数来求数组的长度。


2. 元素访问


使用下标访问数组,同C语言一样,下标也是从0开始


for i := 0; i fmt.Println("Element", i, "of array is", array[i])
}

当然,我们也可以使用Go语言提供的range关键字来遍历数组。


for i, v := range array {
fmt.Println("Element", i, "of array is", v)
}

3.值类型


Go语言中,数组是值类型,作为参数传递时,都会产生一次复制动作。所以,在函数中不能


将数组作为参数传递,因为在函数中操作的只不过是数组的副本而已。


package main
import "fmt"
func modify(array [5]int) {
array[0] = 10
fmt.Println("In Modify, array values:", array)
}
func main() {
array := [5]int{1, 2, 3, 4, 5}
modify(array)
fmt.Println("In Main, array values:", array)
}

它的输出为:


In Modify, array values: [10 2 3 4 5]
In Main, array values: [1 2 3 4 5]

4.数组切片


在前面我们提到,数组有两个特性



  • 数组长度在定义后无法改变

  • 数组是值类型,在参数传递时会产生副本。
    这两大特性使得数组无法适应开发者的真实需求。所以我们使用数组切片(Slice)来弥补
    数组的不足。
    从底层的角度看,数组切片仍然使用数组来管理元素。基于数组,数组切片添加了一系列管理功能。可以随时动态扩充存放空间。并且在传参时不会产生复制。


4.1 基于数组创建数组切片


var marr [5]int = [5]int{1, 2, 3, 4, 5}
var mSlice []int = marr[:3]

Golang支持使用Array[first:last]的方式来基于数组生成一个数组切片。


4.2 直接创建数组切片


mySlice1 := make([]int, 5) //创建一个初始元素为5的数组切片,元素初始值为0
mySlice2 := make([]int, 5, 10) //创建一个初始元素为5的数组切片,元素初始值为0,并且预留10个元素空间。
mySlice3 := []int{1, 2, 3, 4, 5} //创建,并初始化一个数组切片

4.3 遍历


同数组一样,我们可以使用下标或者range的方式遍历数组切片


4.4 动态增减元素


Go语言内置len()和cap()方法。len()函数返回数组切片当前存储的元素个数,cap()函数返回数组切片分配的空间大小。例如:


mySlice := make([]int, 5, 10)
len(mySlice) //5
cap(mySlice) //10

4.4.1 新增元素


如果想往上面的mySlice数组切片添加元素,可以使用 append() 函数。


mySlice = append(mySlice, 1, 2, 3) //mySlice末尾添加三个元素
mySlice2 := []int{8, 9, 10}
mySlice = append(mySlice, mySlice2...) //将mySlice2数组切片添加到mySlice末尾。

5. 内容复制


Go语言另一个内置函数copy(),用于将内容从一个数组切片复制到另一个数组切片。如果两个数组切片不一样大。如果加入两数组切片不一样大,就会按较小的那个数组切片的元素个数进行复制。


slice1 := []int{1, 2, 3, 4, 5}
slice2 := []int{5, 4, 3}
copy(slice2, slice1) //只会复制slice1前三个元素到slice2中
copy(slice1, slice2) //只会复制slice2的3个元素到slice1的前三个位置。


有疑问加站长微信联系






推荐阅读
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
手机用户2502900175
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有