Go 使用setGrade()时,在Main func中创建索引片
问题是,当我在主函数中执行Go 使用setGrade()时,在Main func中创建索引片,go,struct,slice,Go,Struct,Slice,问题是,当我在主函数中执行setGrade时,它的行为就像new(grade)一样,并给了我这个 package main import ( "fmt" ) type Student struct { Name string Grade []int Age int } func (s *Student) setAge(age int) { s.Age = age } func (s *Student) setGrade(gr
setGrade
时,它的行为就像new(grade)一样,并给了我这个
package main
import (
"fmt"
)
type Student struct {
Name string
Grade []int
Age int
}
func (s *Student) setAge(age int) {
s.Age = age
}
func (s *Student) setGrade(grade []int) {
s.Grade = grade
}
func (s *Student) setName(name string) {
s.Name = name
}
func main() {
s := Student{"Klaus", []int{90, 75, 100}, 19}
fmt.Println(s)
s.setAge(20)
fmt.Println(s)
s.setGrade([]int{80})
fmt.Println(s)
}
这里,slices.setGrade([]int{10})
给出了输出{Klaus[10]20}
我想出了一个静态而愚蠢的想法,在
{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80] 20}
但是我有一个问题,当等级随具体指标变化时,我必须给出静态的数字
所需输出:-
func (s *Student) setGrade(grade []int) {
s.Grade[0] = grade
}
所需解决方案:-
我想知道如何在main func imagine python中以这种方式给出特定的索引s.setGrade(grade[0])
我知道这在GO中不起作用,但我想这样做!
或者让我知道还有其他方法吗` 没有您想要的内置方法(合并切片)。但是,您可以使用如下附加方法:
{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80 75 100] 20}
如果您必须更新两个grade INT,那么您可以执行以下操作:
s.setGrade(append([]int{80}, s.Grade[1:]...))
问题: 当前的setGrade函数接受一个整数切片→ <代码>设置等级(等级[]整数) 在函数内部,您正在将现有切片
Grade
设置为传递到setGrade函数的切片→ <代码>s.等级=等级
这将用一个全新的切片替换等级
。这不是你想做的
解决方案
如果要更改切片中特定的值,函数应接受两个参数:
s.setGrade(append([]int{80,95}, s.Grade[2:]...))
我不知道你想做什么,请你澄清最后一部分。setGrade函数应该更改一个等级,还是向等级切片添加一个新等级?如果您只想更改切片中的第一个元素:
s.Grade[0]=Grade
是正确的。如果您想更改特定的等级,为什么不传递等级本身的索引?例如s.setGrate(80,0)
这意味着将第0级改为80。@meshkati你能给我提供正确的代码吗?我可以确保你是正确的!我没有得到你的答案!很高兴帮助您:)
func (s *Student) setGrade(index int, newValue int) {
s.Grade[index] = newValue
}