【问题标题】:Tour of Go exercise #18: Slices围棋练习之旅#18:切片
【发布时间】:2014-08-23 07:20:44
【问题描述】:

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

实施图片。它应该返回一个长度为 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 范围内的值?我不要求代码,而是要求解释/澄清

【问题讨论】:

    标签: go slice


    【解决方案1】:

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

    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)
    }
    

    【讨论】:

    • OP 已经明确提到他们不只对代码感兴趣,而是想要一个解释。这个答案正好相反。
    【解决方案2】:

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

    是的:

    • 一个外部循环,用于分配具有[]uint8 切片dx 大小的a[x],
    • 为每个元素a[x](这是一个[]uint8)提供一个内部循环'y',以便为a[x][y]分配所要求的值(即,像@987654337这样的“有趣的功能”之一@、(x+y)/2x*y)。
      xy 是切片范围内的索引(a,然后是 a[x]):请参阅“For statements”。李>

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

    作为rwilson04 cmets below:

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

    Waqas Ilyas 建议在the commentsy * 10000 / (x + 1)

    【讨论】:

    • @rwilson04 不错!我已将您的评论包含在答案中以获得更多可见性,并添加了来自x*x + y*y 的结果图片
    • 随机评论,但您可以在“有趣的功能”中使用&lt;&lt; 来缩小模式。 &lt;&lt;2 使它变成一半大小,&lt;&lt;3 使它变成四分之一大小,等等。给你一些有趣的模式。
    • 另一个y * 10000 / (x + 1)
    • @WaqasIlyas 不错!我已将其包含在答案中以提高知名度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2015-07-24
    相关资源
    最近更新 更多