英文:
How to pass a 2 dimensional array as a function argument in Go?
问题
我想要能够在 Golang 中将矩阵作为函数参数传递。每次可能是不同的大小,例如 4x4 矩阵、3x2 矩阵等。如果我尝试运行下面的测试代码与源代码进行对比,会收到如下错误信息:
如何将二维数组传递给函数?我是 Go 的新手,之前使用的是动态语言(Python、Ruby)。
源代码
func ReplaceMatrix(mat [][]int, rows, cols, a, b int) {
}
测试代码
func TestReplaceMatrix(t *testing.T) {
var mat [3][3]int
//一些代码
got := ReplaceMatrix(mat[:][:], 3, 3, 0, 1)
}
英文:
So I want to be able to pass a matrix as a function in an argument in Golang. It could be a different size each time - e.g., a 4x4 matrix, 3x2 matrix, etc. If I try running the test code below against the source code I get an error message like:
How do I pass a 2 dimensional array into a function? I'm new to Go and come from a dynamic language background (Python, Ruby).
cannot use mat[:][:] (type [][3]int) as type [][]int in argument to zeroReplaceMatrix
source code
func ReplaceMatrix(mat [][]int, rows, cols, a, b int) {
}
test code
func TestReplaceMatrix(t *testing.T) {
var mat [3][3]int
//some code
got := ReplaceMatrix(mat[:][:], 3, 3, 0, 1)
}
答案1
得分: 10
使用切片的最简单方法。与数组不同,它们是通过引用而不是值传递的。例如:
package main
import "fmt"
type Matrix [][]float64
func main() {
oneMatrix := Matrix{{1, 2}, {2, 3}}
twoMatrix := Matrix{{1, 2, 3}, {2, 3, 4}, {5, 6, 7}}
print(oneMatrix)
print(twoMatrix)
}
func print(X Matrix) {
for _, i := range X {
for _, j := range i {
fmt.Printf("%f ", j)
}
fmt.Println()
}
}
英文:
The easiest way to use slices. Unlike arrays they are passed by reference,not by value. For example:
package main
import "fmt"
type Matrix [][]float64
func main() {
oneMatrix := Matrix{{1, 2}, {2, 3}}
twoMatrix := Matrix{{1, 2,3}, {2, 3,4}, {5, 6,7}}
print (oneMatrix)
print (twoMatrix)
}
func print(X Matrix) {
for _, i := range X {
for _, j := range i {
fmt.Printf("%f ", j)
}
fmt.Println()
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论