数组

数组

如果元素支持==和!=操作符,那么数组也支持此操作

    a := [...]int{1, 2, 3}
    b := [...]int{4, 5, 6}
    println(a == b)  // false
    println(a != b) // true

//下面的代码会抛出异常,因为map类型不支持==和!=运算
    c := [...]map[int]string{{1:"hello"}}
    d := [...]map[int]string{{1: "hello"}}
    println(c == d)  //invalid operation: c == d ([1]map[int]string cannot be compared)
    println(c != d //invalid operation: c == d ([1]map[int]string cannot be compared)
数组的几种定义方式,可以用key-value形式来指定赋值顺序
var a = [...]int{1, 2, 3} //[1 2 3]
var b = [...]int{1: 2, 0: 1, 2: 3} //[1 2 3]
var c = [...]int{1, 2, 3, 4: 5, 6} //[1 2 3 0 5 6]
数组可以通过指针来传递避免产生值复制,造成开销,其使用方法和正常一样
b := a
fmt.Print(b[0])
for i,v in range b{
  fmt.Println(i, v)
}
因为长度是数组的组成部分,所以指向不同长度的数组的指针不是一个数据类型
var d *[3]int
var e *[4]int
d = e //这里会报错,因为d和e属于不同的数据类型,所以不能相互转换
在数组中,len方法和cap方法没有区别,一个返回长度,一个返回容量,数组长度和容量相等
for range迭代的性能相对更好一些
var times [5][0]int
for range times{ //可以省略迭代时的下标
  fmt.Print("hello")
}
----------------------------------------------------------------------------------
for i:=range times{ //可以省略迭代时值的传递,只传递索引
        fmt.Println(i)
}
长度为0的空数组不占用内存空间




原文地址:https://www.cnblogs.com/hualou/p/12069774.html