Go基础学习记录 - Go指南 - Range

{app.params.name}}{app.params.name}}{app.params.name}}

环境

go version go1.10.1 darwin/amd64

Range

for循环的range形式可遍历切片或映射。

当使用 for 循环遍历切片时,每次迭代都会返回两个值。 第一个值为当前元素的下标,第二个值为该下标所对应元素的一份副本。实例演示如下

package main

import "fmt"

var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}

func main() {
    for i, v := range pow {
        fmt.Printf("%d = %d\n", i, v)
    }
}

运行后结果如下

0 = 1
1 = 2
2 = 4
3 = 8
4 = 16
5 = 32
6 = 64
7 = 128

range对索引跟值的处理

可以将下标或值赋予 _ 来忽略它。若你只需要索引,去掉 , value 的部分即可。实例演示如下

package main

import "fmt"

func main() {
    pow := make([]int, 10)
    for i := range pow {
        pow[i] = 1 << uint(i) // == 2**i
    }
    for _, value := range pow {
        fmt.Printf("%d\n", value)
    }
}

运行后的结果和上面一致

练习:切片

实现 Pic 。它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx ,元素类型为 uint8 的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。

图像的选择由你来定。几个有趣的函数包括 (x+y)/2 、x*y 、 x^y 、 x*log(y) 和 x%(y+1) 。

(提示:需要使用循环来分配 [][]uint8 中的每个 []uint8 ; 请使用 uint8(intValue) 在类型之间转换;你可能会用到 math 包中的函数。)

这个是官方的一个练习,有兴趣的可以自己实现下,下面是我的实现

package main

// import "math"

import "golang.org/x/tour/pic"

func Pic(dx, dy int) [][]uint8 {
    x := make([]uint8, dx)
    y := make([][]uint8, dy)

    for i := range y {
        for j := range x {

            // 第一种
            // m := float64(i)
            // t := float64(j)
            // t = float64(math.Log(t))
            // x[j] = uint8(m * t)

            // 第二种
            // x[j] = uint8((i + j) / 2)

            // 第三种
            // x[j] = uint8(i * j)

            // 第四种
            // x[j] = uint8(i ^ j)

            // 第五种
            x[j] = uint8(i % (j + 1))
        }
        y[i] = x
    }

    return y

}

func main() {
    pic.Show(Pic)
}

第一种方式展示的图片如下

第二种方式展示的图片如下

第三种方式展示的图片如下

 

第四种方式展示的图片如下

第五种方式展示的图片如下

 

版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/19


版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 小绒毛的足迹博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/19