Go Tour Slices练习逻辑

时间:2014-08-23 07:20:44

标签: go slice

我正在尝试完成Exercise: Slices from the Go Tour 但是我真的不明白我被要求做什么。

  

实施Pic。它应该返回一个长度为dy的片段,其中每个元素都是一个dx 8位无符号整数片。运行程序时,它将显示您的图片,将整数解释为灰度(井,蓝光)值。

我有以下代码

package main

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

func Pic(dx, dy int) [][]uint8 {
    a := make([][]uint8, dy)
    return a
}

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

到目前为止,我已经创建了长度为dy的切片。但是我不明白下一步。我是否需要创建一个for循环,在其中我将切片的每个元素分配给dx范围内的值?我不是要求代码,而是要求解释/澄清

2 个答案:

答案 0 :(得分:12)

  

我是否需要创建一个for循环,在其中我将切片的每个元素分配给dx范围内的值?

是:

  • 一个外部循环,用于为{x]分配[]uint8 dx个{@ 1}}切片,
  • 为每个元素ya[x])设置内部循环“[]uint8”,以便为a[x][y]分配所请求的值(即“有趣的功能”,如x^y(x+y)/2x*yxy是切片范围内的索引(a,然后是a[x]):请参阅“For statements”。

我喜欢(x ^ y) * (x ^ y)

res

正如rwilson04评论below

  

x*x + y*y是另一个好人

x square plus y square

答案 1 :(得分:0)

请在此处找到两种方法的建议。

package main

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

func Pic(dx, dy int) [][]uint8 {
    p := make([][]uint8, dy)
    for y := range p {
        p[y] = make([]uint8, dx)
        for x := range p[y] {
        p[y][x] = uint8(x^y)
        // p[y][x] = uint8(x*y)
        // p[y][x] = uint8((x+y)/2)
        }
    }
    return p
}

func _Pic(dx, dy int) [][]uint8 {
    p := make([][]uint8, dy)
    for i := 0; i < dy; i++ {
        p[i] = make([]uint8, dx)
    }
    for y := range p {
        for x := range p[y] {
            p[y][x] = uint8(x^y)
            // p[y][x] = uint8(x*y)
            // p[y][x] = uint8((x+y)/2)
        }
    }
    return p
}

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