A Tour of Go : Exercise: Slices

A Tour of Go系列。如有问题欢迎指出~



第三篇,先解释一下要求:

Implement Pic. It should return a slice of length dy, each element of which is a slice of dx 8-bit unsigned integers. When you run the program, it will display your picture, interpreting the integers as grayscale (well, bluescale) values.

The choice of image is up to you. Interesting functions include x^y,(x+y)/2, and x*y.

(You need to use a loop to allocate each []uint8 inside the [][]uint8.)

(Use uint8(intValue) to convert between types.)

意思是实现函数Pic,其功能是根据所给的dx,dy做为矩阵的横纵长度,创建一个图像矩阵,矩阵中的值类型为uint8,代表每个像素的灰度值(或者蓝度值)。

下面是代码:

 1 package main

 2 

 3 import "code.google.com/p/go-tour/pic"

 4 

 5 func Pic(dx, dy int) [][]uint8 {

 6     mat := make([][]uint8, dy)

 7     for i := 0; i < dy; i++ {

 8         mat[i] = make([]uint8, dx)

 9     }

10 

11     //draw

12     for y, _ := range mat {

13         for x, _ := range mat[y] {

14             mat[y][x] = uint8(x ^ y)

15         }

16     }

17     return mat

18 }

19 

20 func main() {

21     pic.Show(Pic)

22 }

运行后将输出如下图形:

A Tour of Go : Exercise: Slices

注意:

  • 矩阵mat的横轴长dx,纵轴长dy。
  • 创建矩阵:make([]Type,len),或者make([]Type,len,cap)。用第二种时请小心,如果指定len(slice长度)为0,cap(slice容量)为大于零的数,该slice中的元素是不能直接引用的(赋值、读取等),所以推荐第一种创建方法。(其他创建方法和slice的len和cap的区别请详见官方文档)
  • 注释//draw下面的代码为绘制矩阵的代码。注意int到uint8的转换,当运行时进行下行转换时,runtime会进行静默处理,如截断等。当进行常量的转换时(如:uint8(1000)),会报错。
  • "^"运算符为二进制XOR(异或)运算。

你可能感兴趣的:(slice)