Array

数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。

1.数组 在定义阶段,长度和类型就固定了,以后不能更改
2.长度也是数组类型的一部分

数组定义:

var 数组变量名 [元素数量]T
// 定义一个长度为3元素类型为int的数组a
var a [3]int

注意:

package main

import "fmt"

func main()  {
var a [3]int
var b [5]int
fmt.Println(a, b) // [0 0 0] [0 0 0 0 0]

   a = b //不可以这样做,因为此时a和b是不同的类型

  // 注意: a与都是b数组, 单两者是不同类型的数组,因为长度不同 
  // 数组的类型 = 数组内数据的类型 + 定义长度
}

数组的初始化

  • 方式一

package main

import "fmt"

func main()  {
// var a1 [3]int = [3]int{1,2,3}
var a1 = [3]int{1,2,3}
var a2 = [5]int{1,2,3}
var s1 = [3]string{"上海"}
fmt.Println(a1) // [1 2 3]
fmt.Println(a2) // [1 2 3 0 0] int类型数组内的数据数量小于定义数量时,默认用零补位
fmt.Println(s1) // [上海 ] string类型数组内的数据数量小于定义数量时,默认用空格补位
}
  • 方式二

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

package main

import "fmt"

func main()  {
  // 自动获取数组长度
var a3 = [...]int{1,2,3,4,5}
var s2 = [...]string{"上海", "北京"}
fmt.Println(a3) // [1 2 3 4 5]
fmt.Println(s2) // [上海 北京]
}
  • 方式三

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

package main

import "fmt"

func main()  {
var a4 [5]int
a4 = [5]int{4:1} // 索引4的数字为1其余为0
fmt.Println(a4) // [0 0 0 0 1]
   fmt.Printf("a4的类型是:%T", a4)  // a4的类型是:[5]int
}

数组的取值

Go语言的数组可按索引取值

package main

import "fmt"

func main()  {
var s3 = [...]string{"上海", "北京"}
fmt.Println(s3[1]) // 北京
fmt.Printf("%T \n", s3[1]) // string
   s4 := s3[0]
fmt.Println(s4) // 上海
}

数组的遍历

package main

import "fmt"

func main()  {
var s5 = [3]int{1,2,3}
for i := 0; i < len(s5); i++{
fmt.Print(s5[i]) //
} for i, v := range s5{
fmt.Printf("索引:%d 值:%d \n", i, v) // 索引:0 值:1 ...
}
}

练习

  • 求数组内元素的和

package main

import "fmt"

func main()  {
var a5 = [...]int{1,3,5}
value := 0
for index := 0; index < len(a5); index++ {
value = value + a5[index]
}
fmt.Println(value) // var v = 0
for _, i := range a5{
v = v + i
}
fmt.Println(value) //
}
  • 查找[1,3,5,7,8]数组内和为8的元素组合

package main

import "fmt"

func main()  {
var a7 = [...]int{1,3,5,7,8}
for i := 0; i < len(a7); i++ {
for j := i+1; j < len(a7); j++ {
if a7[i]+a7[j] == 8 {
fmt.Printf("(%d %d)", a7[i], a7[j]) // (1 7)(3 5)
}
}
}
}

多维(层)数组

Go语言是支持多维数组的,我们这里以二维数组为例(数组中又嵌套数组)。

多维数组的定义

package main

import "fmt"

func main()  {
  // 初始化方式一
var a9 [3][2]int
a9 = [3][2]int{
[2]int{1,2},
[2]int{3,4},
}
fmt.Println(a8) // [1 2 3]
fmt.Println(a9) // [[1 2] [3 4] [0 0]]
// 初始化方式二
var a10 = [...][2]int{
{6,7},
{8,9},
{0,1},
}
fmt.Println(a10) // [[6 7] [8 9] [0 1]]
// 注意:多维数组除了第一次可以用[...], 其他层都不能用[...]
}

多维数组的取值

package main

import "fmt"

func main()  {
var a10 = [...][2]int{
{6,7},
{8,9},
{0,1},
}
fmt.Println(a10[1][0]) //
}

多维数组的遍历

package main

import "fmt"

func main()  {
var a10 = [...][2]int{
{6,7},
{8,9},
{0,1},
}
// 方式一
for i := 0; i < len(a10); i++ {
fmt.Print(a10[i]) // [6 7][8 9][0 1]
}
// 方式二
for _, i := range a10{
fmt.Print(i) // [6 7][8 9][0 1]
}
}

数组是值类型

数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。

package main

import "fmt"

func main()  {
a11 := [2]int{1,2}
a12 := a11 // 在内存中为变量a12开辟了内存空间,存入数组[1 2]
a11[0] = 5 // 改变的是变量a11在内存中数组[1,2]里的值
fmt.Println(a11) // [5 2]
fmt.Println(a12) // [1 2]
}

摘自

Go语言 - 数组 | 多维数组的更多相关文章

  1. C语言之二维数组

    二维数组 还是一个数组,只不过数组中得每一个元素又是一个数组 1). 声明语法 类型 数组名[行][列]; 例:  int nums[2][3];//2行3列的二维数组,保存的数据类型是int类型 c ...

  2. 【C语言】多维数组

    C 语言支持多维数组.多维数组声明的一般形式如下: type name[size1][size2]...[sizeN]; 二维数组 多维数组最简单的形式是二维数组.一个二维数组,在本质上,是一个一维数 ...

  3. C语言基础--二维数组

    二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...

  4. 【学习笔记】【C语言】二维数组

    1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是 ...

  5. 二维数组&多维数组

    1.二维数组 二维数组由多个一维数组组成,其定义方式: ,]{ {,,,}, {,,,}, {,,,} }; 二维数组中括号中,逗号左边表示一维数组的个数,也可以说控制行,逗号后面的数表示每个一维数组 ...

  6. Java基本语法-----java数组(一维数组二维数组)

    嘿嘿!你们懂的,又是图片,委屈大家了. java数组(一维数组二维数组) [正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个"顶"字,你就 ...

  7. 数据结构 二维数组-->稀疏数组-->二维数组

    稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不 ...

  8. java数组---多维数组

    多维数组 多维数组可以看成是数组的数组 比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组. 二维数组 public static void main(String[] args) { ...

  9. c语言中双维数组与指针的那点事儿

    说起c语言的指针,估计对c语言只是一知半解的同志们可能都会很头疼,尤其它跟数组又无耻的联系到一起的时候,就更加淫荡了!!! 怎么说呢,就是有一点规定:(或准则) 数组名可以看成是指向数组头元素的指针, ...

  10. 【嵌入式开发】C语言 指针数组 多维数组

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21402047 . 1. 地址算数运算示例 指针算数运算 ...

随机推荐

  1. list<Integer>,Integer[],int[]之间的互转(jdk1.8)

    偶然在开发过程中需要将int[] 转成 List<Integer>,采用了遍历的方式,写的代码实在太多. List<Integer> list = new ArrayList& ...

  2. python学习-68 反射

    反射 1.什么是反射? 反射的概念是有Smith在1982年首次提出的,主要是指程序可以访问.检测和修正它本身状态或行为的一种能力(自省). 2.以下四个方法可以实现自省 hasattr(object ...

  3. ORACLE链接SQLSERVER数据库数据操作函数范例

    ORACLE链接SQLSERVER数据库数据操作函数范例 create or replace function FUN_NAME(LS_DJBH IN varchar2 ,LS_ITM varchar ...

  4. Qt5 源代码自动跳转

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/nixiaoxianggong/articl ...

  5. Different Subsets For All Tuples CodeForces - 660E (组合计数)

    大意: 定义$f(a)$表示序列$a$本质不同子序列个数. 给定$n,m$, 求所有长$n$元素范围$[1,m]$的序列的$f$值之和. 显然长度相同的子序列贡献是相同的. 不考虑空串, 假设长$x$ ...

  6. idea常用插件安装

    1.IDEA Restart IDEA没有重启的选项,这个工具就是来弥补这个功能,可以在File-->Restart 重启,也可以使用快捷键  CTRL + ALT + R 2.Maven He ...

  7. java ArithUtil 数据计算精度工具

    ArithUtil: /** * 如果需要精确计算,非要用String来够造BigDecimal不可 */ package com.leaniot.securitymonitor.util; impo ...

  8. 通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率

    原文:通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率 使用 Visual Studio 开发 C#/.NET 应用程序,以前有 ReSharper 来不足其各项功能短板 ...

  9. python3基础之“小练习(3)”

    (二十四)将字符串"A screaming comes across the sky."中所有的"s"字符替换为美元符号. # a="A scream ...

  10. Vue项目中遇到的问题汇总

    一.打包后的打开index.html页面空白的几种情况: 引入的css.js路径报错,此时解决方法:把vue.config.js中的增加publicPath: ‘./’ 或者把原来的baseUrl改为 ...