golang之 Array(数组)

目录

  • 一、Array(数组)
  • 二、数组的定义
    • 1. 基本语法
  • 三、数组的初始化
    • 1. 方式一
    • 2. 方式二
    • 3. 方式三
  • 四、数组的遍历
    • 1. 方式一:for循环遍历
    • 2. 方式二:for range遍历
  • 五、多维数组
    • 1. 二维数组的定义
    • 2. 二维数组的遍历
  • 六、数组是值类型
  • 七、数组的其他相关方法

一、Array(数组)

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

二、数组的定义

1. 基本语法

// 基本语法:
var 数组变量名 [元素数量]T

// 实例:
var a [3]int  // 定义一个长度为3元素类型为int的数组a
var b [4]int
a = b //不可以这样做,因为此时a和b是不同的类型
  • 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [5]int[10]int是不同的类型
  • 数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic(数组的下标和python中列表的索引一样)

三、数组的初始化

  • 3种初始化数组的方式

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)                      //[北京 上海 深圳]
}

2. 方式二

  • 照上面的方法每次都要确保提供的初始值和数组长度一致。所以我们通常在定义数组时使用[...]方法,可以让编译器根据初始值的个数自行推断数组的长度,例如:
  • **注意:当数组为多维数组时,[...]方法只对数组的第一层有效(即[...]在定义数组时只能放在首部)。
func main() {
    var testArray [3]int
    var 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]int
    fmt.Println(cityArray)                          //[北京 上海 深圳]
    fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string
}

3. 方式三

  • 我们还可以使用指定索引值的方式来初始化数组,例如:
func main() {
    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
}

四、数组的遍历

  • 遍历数组有2种方式

1. 方式一:for循环遍历

func main() {
    var a = [...]string{"北京", "上海", "深圳"}

    for i := 0; i < len(a); i++ {
        fmt.Println(a[i])
    }
}    

2. 方式二:for range遍历

func main() {
    var a = [...]string{"北京", "上海", "深圳"}

    for index, value := range a {
            fmt.Println(index, value)
        }
}

五、多维数组

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

1. 二维数组的定义

func main() {
    a := [3][2]string{
        {"北京", "上海"},
        {"广州", "深圳"},
        {"成都", "重庆"},
    }
    fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]]
    fmt.Println(a[2][1]) //支持索引取值:重庆
}
  • 注意: 多维数组只有第一层可以使用...来让编译器推导数组长度,例如:
// 支持的写法
a := [...][2]string{
    {"北京", "上海"},
    {"广州", "深圳"},
    {"成都", "重庆"},
}
// 不支持多维数组的内层使用...
b := [3][...]string{
    {"北京", "上海"},
    {"广州", "深圳"},
    {"成都", "重庆"},
}

2. 二维数组的遍历

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

// 输出:
北京  上海
广州  深圳
成都  重庆 

六、数组是值类型

  • 数组时值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值
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的副本x
    fmt.Println(a) //[10 20 30]
    b := [3][2]int{
        {1, 1},
        {1, 1},
        {1, 1},
    }
    modifyArray2(b) //在modify中修改的是b的副本x
    fmt.Println(b)  //[[1 1] [1 1] [1 1]]
}

七、数组的其他相关方法

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

原文地址:https://www.cnblogs.com/Mcoming/p/11973714.html

时间: 2024-07-30 01:43:27

golang之 Array(数组)的相关文章

golang基础--Array数组

基本特性 格式: var Name [n]<type>,n>0 如: var a [10]int 表示,定义一个长度为10,元素类型为int性的数组 数组长度: 长度(len)也是数组类型的一部分,因此具有不同长度的数组为不同的类型. 如var a [2]int != var a [2]int 注意区分指向数组的指针和指针数组 // 指向数组的指针:变量是指针 a :=[...]int[9:1] //顶一个变量a的数组(长度为100,第100个元素为1) var p *[...]int

golang之array

golang使用array表示固定大小的数组,使用slice表示动态数组. package main import "fmt" func main() { var a = [5]int{2,3,5,7,11} fmt.Printf("type of array: %T\n", a) fmt.Printf("address of array: %p\n", &a) fmt.Printf("address of arrar[0]:

PHP-Manual的学习----【语言参考】----【类型】-----【array数组】

1.Array 数组  PHP 中的 数组 实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性.由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的. 解释这些结构超出了本手册的范围,但对于每种结构至少会提供一个例子.要得到这些结构的更多信息,建议参考有关此广阔主题的其它著作. 2.语法:定义数组 array()  可以用 ar

JS中Array数组的三大属性用法

Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了Array数组的3个属性,length属性.prototype属性.constructor属性使用,并附注Array数组对象的8个分类及多个方法使用,具体如下: 对象的3个属性 1.length属性 length属性 Length属性表示数组的长度,即其中元素的个数.因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length-

Array(数组)的使用

方法 说明 Concat() 连接2个或多个数组,并返回结果 Push() 向数组末尾添加一个或多个元素,并返回新的长度 Reverse() 颠倒数组中元素的顺序 Sort() 对数组的元素进行排序 Slice() 从某个已有的数组返回数组选定的元素 toString() 把数组转换成字符串 Join() 连接 toLocaleString() 把数组转换为本地字符串,并返回结果 <script type="text/javascript" language="java

Java Script基础(八) Array数组对象

Java Script基础(八) Array数组对象 一.Array数组 JavaScript中的数组也是具有相同数据类型的一个或者多个值得集合.用法和Java中的数组类似. Array对象的常用属性和方法: 属性: length:获取数组的长度: 方法: join():把数组中的所有元素放入一个字符串中,通过分隔符进行分隔. sort():对数组元素进行排序. 1.创建数组 语法: var a1 = new Array();           //创建一个数组,长度为0: var a2 = 

js-清空array数组

1.splice:删除元素并添加新元素,直接对数组进行修改,返回含有被删除元素的数组. arrayObject.splice(index,howmany,element1,.....,elementX) index:必选,规定从何处添加/删除元素. howmany:必选,规定应该删除多少元素.未规定此参数,则删除从 index 开始到原数组结尾的所有元素. element1:可选,规定要添加到数组的新元素. Js代码    <script type ="text/javascript&qu

js基础,Array 数组对象、BOM 浏览器对象模型

Array 数组对象 定义数组的 3种方式 var week = new Array(); var week = new Array(‘星期一’ , ‘星期二, ‘星期三’); var week = (‘星期一’ , ‘星期二, ‘星期三’); 常用方法: 获取数组的长度 .length: alert(week.length); 获取数组下标所对应的值: alert(week[0]); 数组元素添加: 将一个或多个新元素添加到数组结尾,并返回数组新长度 var week_len = week.p

Swift中实现Array数组和NSArray数组的相互转换与遍历

Array是Swift中的数组数据类型.而NSArray是OC中的数组数据类型.两者有差别有联系.在Swift中有时候难免会使用到OC中的一些东西.今天我们就来Swift中使用NSArray和Array,而且进行转化. (1)声明一个Array数组.并进行遍历.代码例如以下: let stringArray: Array<String> = ["10", "20","30","40","50"]

JavaScript string array 数组

Array类可以如下定义: var aValues = new Array(); 如果预先知道数组的长度,可以用参数传递长度 var aValues = new Array(20); ------------------如下2种定义方式是一样的--------1----------- var aColors = new Array(); aColors[0] = "red"; aColors[1] = "green"; aColors[2] = "blue