我理解Go中数组和切片之间的区别.但我不明白的是为什么有数组是有帮助的.为什么数组类型定义指定长度和元素类型有帮助?为什么我们使用的每个"数组"都不能成为切片?
这个问题是关于访问数组和切片元素的速度,而不是关于将它们作为参数传递给函数的效率.
在大多数情况下,我希望数组比切片更快,因为切片是描述数组的连续部分的数据结构,因此在访问切片的元素时可能会涉及额外的步骤(间接地是其底层数组的元素) .
所以我写了一个小测试来测试一批简单的操作.有4个基准函数,前2个测试全局切片和全局数组,另外2个测试局部切片和本地数组:
var gs = make([]byte, 1000) // Global slice
var ga [1000]byte // Global array
func BenchmarkSliceGlobal(b *testing.B) {
for i := 0; i < b.N; i++ {
for j, v := range gs {
gs[j]++; gs[j] = gs[j] + v + 10; gs[j] += v
}
}
}
func BenchmarkArrayGlobal(b *testing.B) {
for i := 0; i < b.N; i++ {
for j, v …
Run Code Online (Sandbox Code Playgroud) 在Java中,正如我们所知,二维数组是多维一维数组.这意味着那些一维数组在内存上不连续.
相反,在C中,二维数组实际上是一维数组,其大小为total_row*total_column.因为Go语言使用了C语言中的许多概念.所以我的问题是:Go中的二维数组的内存表示看起来像是C还是Java?
在Dave Cheney 的一次酒吧测验中,我发现了以下结构:
a := [...]int{5, 4: 1, 0, 2: 3, 2, 1: 4}
fmt.Println(a)
>> [5 4 3 2 1 0]
Run Code Online (Sandbox Code Playgroud)
(游乐场链接)
似乎您可以在数组的初始化字段中使用键(4: 1, 0
意味着将索引 4 处的元素设置为 1,将索引 5 处的元素设置为 0)。我以前从未见过这样的事情。它的用例是什么?为什么不直接设置特定的索引?
我需要创建一个二维字符串数组,如下所示 -
matrix = [['cat,'cat','cat'],['dog','dog']]
Run Code Online (Sandbox Code Playgroud)
代码:-
package main
import (
"fmt"
)
func main() {
{ // using append
var matrix [][]string
matrix[0] = append(matrix[0],'cat')
fmt.Println(matrix)
}
}
Run Code Online (Sandbox Code Playgroud)
错误:-
panic: runtime error: index out of range
goroutine 1 [running]:
main.main()
/tmp/sandbox863026592/main.go:11 +0x20
Run Code Online (Sandbox Code Playgroud) 我正在学习 Go,我正在尝试生成一个二维数组 [][]int,它在嵌套的 for 循环中只是在该位置放置一个值。我是否总是必须使用 make 创建固定大小的数组,或者是否可以在循环中动态完成此操作?
genMap := [][]int{}
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
genMap[i][j] = 1
}
}
return genMap
Run Code Online (Sandbox Code Playgroud)
但这会导致错误索引超出范围。所以我不太确定这在 Go 中是否可能,或者我错过了一些重要的东西
I am trying to simplay make a 2D array as a field on an object. I want a function that creates the object and returns it. But when trying to create the 2d array it returns a single array.
type Struct struct {
X int
Y int
Grid [][]bool
}
func NewLifeSimulator(sizeX, sizeY int) *Struct{
s := &Struct{
X: sizeX,
Y: sizeY,
Grid: make([][]bool, sizeX,sizeY), //Creates a regular array instead of 2D
}
return s
}
Run Code Online (Sandbox Code Playgroud)
What do I need …
假设我有数组A
并且B
在Go中.什么是追加的所有值最快的方式B
来A
?