Pointers 在结构指针方法中操作矩阵数据成员
我正在创建一个结构,该结构表示一个矩阵,其中包含操作类型中数据的方法。我使用两种方法作为示例,将单行或列设置为特定值。以下是我的代码片段:Pointers 在结构指针方法中操作矩阵数据成员,pointers,matrix,struct,go,Pointers,Matrix,Struct,Go,我正在创建一个结构,该结构表示一个矩阵,其中包含操作类型中数据的方法。我使用两种方法作为示例,将单行或列设置为特定值。以下是我的代码片段: type Matrix struct { Height, Width int data [][]int } func NewMatrix(nrows, ncols int) (mat *Matrix) { mat = new(Matrix) mat.Height = nrows mat.Width = ncols
type Matrix struct {
Height, Width int
data [][]int
}
func NewMatrix(nrows, ncols int) (mat *Matrix) {
mat = new(Matrix)
mat.Height = nrows
mat.Width = ncols
mat.data = make([][]int, nrows)
for i := range mat.data {
mat.data[i] = make([]int, ncols)
for j := range mat.data[i]{
mat.data[i][j] = 0
}
}
return
}
func (mat *Matrix) SetCol(col, val int) {
for i := 0; i < mat.Height; i++ {
mat.data[i][col] = val
}
}
func (mat *Matrix) SetRow(row, val int) {
for i := 0; i < mat.Width; i++ {
mat.data[row][i] = val
}
}
我发现Matrix
实例的data
属性正在方法SetCol
中设置,但一旦它从此方法返回,data
似乎就是我初始化它的空矩阵
为什么我在方法中操作的data
属性在方法调用的生命周期后不会持久化?我怎样才能解决这个问题
编辑
我发现问题在于,我在循环中的每次迭代中都实例化了一个新的
矩阵实例,这就是为什么在我使用SetCol
和SetRow
操作后,矩阵总是显示为空的原因。所以这个问题不是真的有效。效果很好,您如何检查值?顺便说一句,您不需要循环将其设置为0,默认为0。非常感谢@OneOfOne。我没有意识到我不需要将值初始化为0。我通过对行的值求和来检查我的值。但我发现了这个问题,结果是一个相当愚蠢的错误。我在矩阵上执行的命令在一个循环中,我在循环中实例化矩阵的一个新实例,因此我在每次迭代中清除矩阵,因此我从未看到矩阵总是空的。每个人都会这样:)Go好运!
mat := NewMatrix(33,33)
mat.SetCol(2, 3)
mat.SetRow(2, 3)