在Go语言中,嵌套循环数组的行为与其他语言的数组不同。

huangapple go评论77阅读模式
英文:

Nested loops array in Go not behaving like other languages' array

问题

为什么这个函数打印出一个数组[83 83 83 83 83]而不是[98 93 77 82 83]

package main

import "fmt"

func main() {
    var x [5]float64
    scores := [5]float64{ 98, 93, 77, 82, 83, }

    for i, _ := range x {
        for j, _ := range scores {
            // 用 scores 数组的元素填充 x 数组
            x[i] = scores[j]
        }
    }
    fmt.Println(x)
}

这个函数打印出[83 83 83 83 83]的原因是,内部的嵌套循环将 scores 数组的每个元素都赋值给了 x 数组的每个元素。由于内部循环的 j 始终从 0 到 4 循环,所以每次都将 scores[0] 的值赋给了 x 数组的每个元素,因此最终 x 数组中的所有元素都是 scores[0] 的值,即 83。如果你想要得到[98 93 77 82 83]的结果,可以将内部循环的赋值语句修改为x[i] = scores[i]。这样,x 数组的每个元素将分别与 scores 数组的对应元素进行赋值。

英文:

Why is this function printing out an array of [83 83 83 83 83] instead of [98 93 77 82 83] ?

package main

import "fmt"

func main() {
    var x [5]float64
    scores := [5]float64{ 98, 93, 77, 82, 83, }

    for i, _ := range x {
        for j, _ := range scores {
            // fill up x array with elements of scores array
            x[i] = scores[j]
        }
    }
    fmt.Println(x)
}

答案1

得分: 5

因为你正在用scores的每个值填充x[i]。你有一个额外的循环。

由于切片scores的最后一个值是83,你多次填充x,每个位置都是83。

更简单的方法是:

for i, _ := range x {
    // 用scores数组的元素填充x数组
    x[i] = scores[i]
}

输出:[98 93 77 82 83]

play.golang.org

英文:

Because you are filling x[i] with each of the values of scores.
You have one extra loop.

Since the last value of the slice scores is 83, you are filling x one more time, with 83 for each slot.

Simpler would be:

for i, _ := range x {
	// fill up x array with elements of scores array
	x[i] = scores[i]
}

<kbd>play.golang.org</kbd>

Output: [98 93 77 82 83]

答案2

得分: 1

你有太多的循环。重写如下:

package main

import "fmt"

func main() {
    var x [5]float64
    scores := [5]float64{98, 93, 77, 82, 83}
    for i := range x {
        x[i] = scores[i]
    }
    fmt.Println(x)
}

输出:

[98 93 77 82 83]

在这种情况下,你可以简单地写成:

package main

import "fmt"

func main() {
    var x [5]float64
    scores := [5]float64{98, 93, 77, 82, 83}
    x = scores
    fmt.Println(x)
}

输出:

[98 93 77 82 83]
英文:

You have too many loops. Write:

package main

import &quot;fmt&quot;

func main() {
	var x [5]float64
	scores := [5]float64{98, 93, 77, 82, 83}
	for i := range x {
		x[i] = scores[i]
	}
	fmt.Println(x)
}

Output:

[98 93 77 82 83]

In this case, you could simply write:

package main

import &quot;fmt&quot;

func main() {
	var x [5]float64
	scores := [5]float64{98, 93, 77, 82, 83}
	x = scores
	fmt.Println(x)
}

Output:

[98 93 77 82 83]

huangapple
  • 本文由 发表于 2014年9月24日 19:30:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/26015813.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定