zoukankan      html  css  js  c++  java
  • 数组和切片2

    数组的遍历:

    方式1-常规遍历:
      前面已经讲过了,不在赘述。

    方式2-for-range结构遍历
      这是Go语言一种独有的结构,可以用来遍历访问数组的元素

    基本语法:
    for inde, value := range array01 {
      ...
    }

    说明:

      1)第一个返回值 index 是数组的下标

      2)第二个value是在该下标位置的值

      3)它们都是仅在 for 循环内部可见的局部变量

      4)遍历数组元素的时候,如果不想使用下标index,可以直接把下标index标为下划线_

      5)index 和 value 的名称不是固定的,即程序员可以自行指定,一般命名为 index 和 value

    案例:

    func main() {

      //演示for-range遍历数组
      var heroes = [3]string{"松江", "吴用", "卢俊义"}
      for i, v := range heroes {
        fmt.Printf("i=%v v=%v ", i, v)
        fmt.Printf("heroes[%d]=%v ", i, heroes[i])  //传送方式打印,建议使用上面的
      }

      for _, v := range heroes {
        fmt.Printf("元素的值=%v ", v)
      }
    }

     数组的注意事项和细节:

    1)数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。

    func main() {
      var arr01 [3]int
      arr01[0] = 1
      arr01[1] = 30
      //arr01[2] = 1.1 //这里会报错,数据类型不统一
      arr01[2] = 90
      //其长度是固定的,不能动态变化,否则报越界
      //arr01[3] = 80   数组不能动态增长

      fmt.Println(arr01)
    }

    2)var arr []int 这时 arr 就是一个slice 切片,切片后面专门讲解。

    3)数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。

    4)数组创建后,如果没有赋值,有默认值(零值)

      数值类型数组:默认值为0
      字符串数组: 默认值为 ""
      bool数组: 默认值为 false

    func main() {
      //1.数值(整数系列,浮点数系列) => 0
      //2.字符串 ==> ""
      //3.布尔类型 ==> false
      var arr01 [3]float32
      var arr02 [3]string
      var arr03 [3]bool
      fmt.Printf("arr01=%v arr02=%v arr03=%v ", arr01, arr02, arr03)
    }

    5)使用数组的步骤 1. 声明数组并开辟空间 2.给数组各个元素赋值 3.使用数组

    6)数组的下标是从0开始的。

    7)数组下标必须在指定范围内使用,否则报 panic:数组越界,比如: var arr [5]int 则有效下标为 0-4

    8)Go的数组属 值类型, 在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响。

    func test01(arr [3]int) {
      arr[0] = 88
    }

    func main() {
      arr := [3]int{11, 22, 33}
      test01(arr)
      fmt.Println("main arr=", arr)
    }

    9)如想在其他函数中,去修改原来的数组,可以使用引用传递(指针方式)

    func test02(arr *[3]int) {
      (*arr)[0] = 88
    }

    func main() {
      arr := [3]int{11, 22, 33}
      test02(&arr)
      fmt.Println("main arr=", arr)
    }

    10)长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度,看下面的例子:

     

    题1:
    编译错误,因为不能把[3]int 传递给 []int

    题2:
    编译错误,因为不能把[3]int 传递给[4]int ,go语言认为这是两种数据类型。所以不匹配。

    题3:
    这个正确

    数组的应用案例:

    1)创建一个byte类型的26个元素的数组,分别 放置'A'-'Z'。使用for循环访问所有元素并打印出来。提示:字符数据运算 'A'+1 -> 'B'

    func main() {

      //思路
      //1.声明一个数组 var myChars [26]byte
      //2.使用for循环,利用 字符可以进行运算的特点来赋值 'A'+1 -> 'B'
      //3.使用for打印即可

      var myChars [26]byte
      for i := 0; i < 26; i++ {
        myChars[i] = 'A' + byte(i) //注意需要将 i=>byte
        fmt.Printf("%c ", myChars[i])
      }
    }

    2)请求出一个数组的最大值,并得到对应的下标

    func main() {

      //思路
      //1.声明一个数组 var intArr[5] = [...]int {1, -1, 9, 90, 11}
      //2.嘉定第一个元素就是最大值,下标就0
      //3.然后从第二个元素开始循环比较,如果发现有更大,则交换

      var intArr = [...]int {1, -1, 9, 90, 11}
      maxVal := intArr[0]
      maxValIndex := 0
      for i := 1; i < len(intArr); i++ {
        if maxVal < intArr[i] {
          maxVal = intArr[i]
          maxValIndex = i
        }
      }
      fmt.Printf("maxVal=%v maxValIndex=%v ", maxVal, maxValIndex)
    }

    3)请求出一个数组的和和平均值。 for-range

    func main() {

      //思路
      //1.声明一个数组
      //2.求出和sum
      //3.求出平均值
      var intArr2 = [...]int {1, -1, 9, 90, 12}
      sum := 0
      for _, val := range intArr2 {
        //累计求和
        sum += val
      }

      fmt.Printf("sum=%v 平均值=%v ", sum, float64(sum) / float64(len(intArr2)))
    }

  • 相关阅读:
    事务创建函数
    实现Xshell断开连接情况下Linux命令继续执行
    MySQL UNION 操作符
    CentOS安装部署Mysql 5.7
    连接数据库
    @Results用法总结
    在Java中如何高效的判断数组中是否包含某个元素
    Java中的map集合顺序如何与添加顺序一样
    instanceof的用法
    枚举
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11355424.html
Copyright © 2011-2022 走看看