英文:
Go: range and len of multidimensional array?
问题
在多维数组上使用range和len是可能的吗?
无论是使用var a [3]int8还是
package main
func main() {
var a [3][5]int8
for h := range a {
println(h)
}
println(len(a))
}
两者都会产生以下输出:
<code>
0
1
2
3
</code>
?
感谢dystroy的答案,这是一个我能够适应的写入和读取三维数组的示例(在这里发布是因为我在找到任何此类示例时遇到了很多麻烦,所以也许这会帮助其他人):
package main
func main() {
var a [3][5][7]uint8
//将值写入数组
for x, b := range a {
for y, c := range b {
for z, _ := range c {
a[x][y][z] = uint8(x*100+y*10+z)
}
}
}
//从数组中读取值
for _, h := range a {
for _, i := range h {
for _, j := range i {
print(j, "\t")
}
println()
}
println()
}
}
英文:
Is it possible to use range and len on a multidimensional array?
Either with var a [3]int8 or
package main
func main () {
var a [3][5]int8
for h := range a {
println(h)
}
println(len(a))
}
Both produce
<code>
0
1
2
3
</code>
?
Thanks to dystroy's answer, here's an example of writing and reading a 3-dimensional array i was able to adapt (posting here because I had much trouble finding any examples of this, so maybe this will help someone else):
package main
func main() {
var a [3][5][7]uint8
//write values to array
for x, b := range a {
for y, c := range b {
for z, _ := range c {
a[x][y][z] = uint8(x*100+y*10+z)
}
}
}
//read values from array
for _, h := range a {
for _, i := range h {
for _, j := range i {
print(j, "\t")
}
println()
}
println()
}
}
答案1
得分: 17
在Go语言中,和大多数其他语言一样,多维数组被称为数组的数组。len
操作符只能给出“外部”数组的长度。
如果你将其视为以下形式,也许对你来说var声明会更清晰:
var a [3]([5]int8)
这也是可以编译的。它是一个大小为3的数组,其元素是大小为5的int8数组。
package main
import "fmt"
func main() {
var a [3][5]int8
for _, h := range a {
fmt.Println(len(h)) // 每个都打印5
}
fmt.Println(len(a)) // 打印3,外部数组的长度
}
输出结果为:
5
5
5
3
要安全地遍历整个矩阵,可以这样做:
for _, h := range a {
for _, cell := range h {
fmt.Print(cell, " ")
}
fmt.Println()
}
如果需要更改内容,可以这样做:
for i, cell := range h { // i是索引,cell是值
h[i] = 2 * cell
}
英文:
In Go as in most languages, what you call a multidimensional array is an array of arrays. The len
operator only gives you the length of the "external" array.
Maybe the var declaration could be clearer for you if you see it as
var a [3]([5]int8)
which also compiles. It's an array of size 3 whose elements are arrays of size 5 of int8.
package main
import "fmt"
func main() {
var a [3][5]int8
for _, h := range a {
fmt.Println(len(h)) // each one prints 5
}
fmt.Println(len(a)) // prints 3, the length of the external array
}
outputs
5
5
5
3
To loop safely through the whole matrix, you can do this :
for _, h := range a {
for _, cell := range h {
fmt.Print(cell, " ")
}
fmt.Println()
}
If you need to change the content, you may do
for i, cell := range h { // i is the index, cell the value
h[i] = 2 * cell
}
答案2
得分: 2
使用range的解决方案已经提供,所以我将讨论如何在golang中使用长度(len)遍历多维数组。
如果你有一个数组arr[][]
:
[1,2,3] [4,5,6]
现在len(arr)
将输出= 2。
而len(arr[1])
将输出= 3。
示例代码在这里提供:https://play.golang.org/p/XerzPhkQrhU
英文:
The solution with range is already provided so i'll talk about how to use length (len) to go through a multi-dimesional array in golang.
So if u have an array arr[][]
:
[1,2,3]
[4,5,6]
Now the len(arr)
will output = 2.
while len(arr[1]) will output = 3
.
Sample code is provided here : https://play.golang.org/p/XerzPhkQrhU
答案3
得分: 0
不,第一个产生0,1,2(在范围内的索引)
http://play.golang.org/p/0KrzTRWzKO
而第二个产生3(数组的长度)。
http://play.golang.org/p/0esKFqQZL0
在这两种情况下,您都在使用最外层的数组。
英文:
No, the first one produces 0,1,2 ( index of in the range )
http://play.golang.org/p/0KrzTRWzKO
And the second one produces 3 ( the length of the array ).
http://play.golang.org/p/0esKFqQZL0
In both cases you're using the outermost array.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论