GoLong的学习之路(五)语法之数组

2023-10-24 05:52
文章标签 数组 学习 语法 golong

本文主要是介绍GoLong的学习之路(五)语法之数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

书接上回,上回书说到,循环语句,在go中循环语句的少了whlie这个关键词,但是与之for可以改这个改这个特点。并且在终止关键词中,又有标签可以方便,停止。这次说数组

文章目录

  • Array(数组)
    • 数组的初始化
      • 方法一
      • 方法二
      • 方法三
    • 数组遍历
    • 二维数组
      • 二维数组的遍历
    • 数组是值类型

Array(数组)

数组是同一种数据类型元素的集合。

在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。(有点类似与C语言)

var 数组变量名 [元素数量] T

数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。

var a [3]int
var b [4]int
a = b //不可以这样做,因为此时a和b是不同的类型

数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1,访问越界(下标在合法范围之外),则触发访问越界,会报错。

数组的初始化

方法一

初始化数组时可以使用初始化列表来设置数组元素的值。

func main() {var testArray [3]int                        //数组会初始化为int类型的零值var numArray = [3]int{1, 2}                 //使用指定的初始值完成初始化var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化fmt.Println(testArray)                      //[0 0 0]fmt.Println(numArray)                       //[1 2 0]fmt.Println(cityArray)                      //[北京 上海 深圳]
}

在这里插入图片描述

方法二

按照上面的方法每次都要确保提供的初始值和数组长度一致,一般情况下我们可以让编译器根据初始值的个数自行推断数组的长度。

var testArray [3]intvar numArray = [...]int{1, 2}var cityArray = [...]string{"北京", "上海", "深圳"}fmt.Println(testArray)                          //[0 0 0]fmt.Println(numArray)                           //[1 2]fmt.Printf("type of numArray:%T\n", numArray)   //type of numArray:[2]intfmt.Println(cityArray)                          //[北京 上海 深圳]fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string
}

在这里插入图片描述

方法三

我们还可以使用指定索引值的方式来初始化数组

a := [...]int{1: 1, 3: 5}fmt.Println(a)                  // [0 1 0 5]fmt.Printf("type of a:%T\n", a) //type of a:[4]int

在这里插入图片描述

数组遍历

func main() {var a = [...]string{"北京", "上海", "深圳"}// 方法1:for循环遍历for i := 0; i < len(a); i++ {fmt.Println(a[i])}// 方法2:for range遍历for index, value := range a {fmt.Println(index, value)}
}

二维数组

二维数组和C语言和java类似。用法和含义都差不多

func main() {a := [3][2]string{{"北京", "上海"},{"广州", "深圳"},{"成都", "重庆"},}fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]]fmt.Println(a[2][1]) //支持索引取值:重庆
}

二维数组的遍历

import "fmt"func main() {a := [3][2]string{{"北京", "上海"},{"广州", "深圳"},{"成都", "重庆"},}fmt.Println(a)       //[[北京 上海] [广州 深圳] [成都 重庆]]fmt.Println(a[2][1]) //支持索引取值:重庆for _, v1 := range a {for _, v2 := range v1 {fmt.Printf("%s\t", v2)}fmt.Println()}
}

多维数组只有第一层可以使用…来让编译器推导数组长度。

数组是值类型

什么是值类型?其实对比java就可以明白,Java中的数组是引用类型,在方法中传参,对数数组的元素进行修改会数组原有的数据发生改变,但是,Go中不存在这个方式。Go中进行传入的是值类型,诺是函数想对数组元素进行改变,就必须通过指针。此处不说,等待下回分解。

func modifyArray(x [3]int) {x[0] = 100
}func modifyArray2(x [3][2]int) {x[2][0] = 100
}
func main() {a := [3]int{10, 20, 30}modifyArray(a) //在modify中修改的是a的副本xfmt.Println(a) //[10 20 30]b := [3][2]int{{1, 1},{1, 1},{1, 1},}modifyArray2(b) //在modify中修改的是b的副本xfmt.Println(b)  //[[1 1] [1 1] [1 1]]
}

在这里插入图片描述

  1. 数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。
  2. [n]*T表示指针数组, * [n]T表示数组指针 。

这篇关于GoLong的学习之路(五)语法之数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/273129

相关文章

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert