• Go语言 range关键字循环迭代切片


      Go语言有个特殊的关键字 range,它可以配合关键字 for 来迭代切片里的每一个元素。当迭代切片时,关键字 range 会返回两个值,第一个值是当前迭代到的索引位置,第二个值是该位置对应元素值的一份副本,如下图所示

    需要强调的是,range 返回的是每个元素的副本,而不是直接返回对该元素的引用,如下所示

        // 创建一个整型切片,并赋值
        slice := []int{10, 20, 30}
        // 迭代每一个元素,并显示其值
        for k, v := range slice {
            fmt.Printf("index:%d value:%d value-addr:%X elemm-addr:%X 
    ", k, v, &v, &slice[k])
        }

    输出结果为:

    index:0 value:10 value-addr:C00000A0B0 elemm-addr:C000010340
    index:1 value:20 value-addr:C00000A0B0 elemm-addr:C000010348
    index:2 value:30 value-addr:C00000A0B0 elemm-addr:C000010350

    因为迭代返回的变量是一个在迭代过程中根据切片依次赋值的新变量,所以 value 的地址总是相同的,要想获取每个元素的地址,需要使用切片变量和索引值(例如上面代码中的 &slice[k])。

      当然,range 关键字不仅仅可以用来遍历切片,它还可以用来遍历数组、字符串、map 或者通道等。

    package main
    
    import "fmt"
    
    func main() {
        // 创建一个整型切片,并赋值
        slice := []int{10, 20, 30}
        // 迭代每一个元素,并显示其值
        for k, v := range slice {
            fmt.Printf("index:%d value:%d value-addr:%X elemm-addr:%X 
    ", k, v, &v, &slice[k])
        }
        fmt.Println("
    使用空白标识符(下划线)来忽略索引值")
        //使用空白标识符(下划线)来忽略索引值
        for _, v := range slice {
            fmt.Printf(" value:%d   
    ", v)
        }
        fmt.Println("
    使用传统的 for 循环对切片进行迭代")
        //使用传统的 for 循环对切片进行迭代
        for i := 0; i < len(slice); i++ {
            fmt.Printf(" value:%d   
    ", slice[i])
        }
    }

      执行结果

  • 相关阅读:
    KL散度与反向KL散度
    matplotlib 清除axis plt.cla()、plt.clf()、plt.close()
    fig,ax = plt.subplots()
    python matplotlib 中ax.legend()用法解释
    Tensorflow 创建神经网络(二)可视化
    Tensorflow 创建神经网络(一)
    Tensorflow add_layer
    Tensorflow feed_dict={}
    Tensorflow tf.assign的使用
    百度编辑器去掉本地保存
  • 原文地址:https://www.cnblogs.com/personblog/p/12253159.html
Copyright © 2020-2023  润新知