使用 setGrade() 时 Main func 中的索引切片
Index slice within Main func when using setGrade()
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)
}
问题是当我在主函数中执行 setGrade
时,它的行为就像 new(grade) 并给我这个
{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80] 20}
这里,切片 s.setGrade([]int{10})
给出了输出 {Klaus [10] 20}
我通过在
中使用索引想出了一个静态和愚蠢的想法
func (s *Student) setGrade(grade []int) {
s.Grade[0] = grade
}
但我有一个问题,当成绩随特定索引发生变化时,我必须给出静态数字
要求输出:-
{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80 75 100] 20}
所需的解决方案:-
我有些想在 main func 中给出特定的索引想象 python 这样 s.setGrade(grade[0])
我知道这在 GO 中行不通,但我想这样做!
或者让我知道还有其他方法吗!`
没有您要查找的内置方法(合并切片)。但是,您可以使用如下附加方法:
s.setGrade(append([]int{80}, s.Grade[1:]...))
如果您必须更新两个成绩整数,那么您可以这样做:
s.setGrade(append([]int{80,95}, s.Grade[2:]...))
问题:
您当前的 setGrade 函数接受整数片段 → setGrade(grade []int)
在函数内部,您正在将现有切片 Grade
设置为传递给 setGrade 函数的切片 → s.Grade = grade
这是用全新的切片替换 Grade
。这不是你想做的。
解决方案
如果要更改切片中的特定值,您的函数应接受 2 个参数:
- 要更新的切片的索引
- 您要在该索引处设置的新值
您的函数应使用索引来识别应更改的值,然后将其设置为传入的值。像这样:
func (s *Student) setGrade(index int, newValue int) {
s.Grade[index] = newValue
}
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)
}
问题是当我在主函数中执行 setGrade
时,它的行为就像 new(grade) 并给我这个
{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80] 20}
这里,切片 s.setGrade([]int{10})
给出了输出 {Klaus [10] 20}
我通过在
func (s *Student) setGrade(grade []int) {
s.Grade[0] = grade
}
但我有一个问题,当成绩随特定索引发生变化时,我必须给出静态数字
要求输出:-
{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80 75 100] 20}
所需的解决方案:-
我有些想在 main func 中给出特定的索引想象 python 这样 s.setGrade(grade[0])
我知道这在 GO 中行不通,但我想这样做!
或者让我知道还有其他方法吗!`
没有您要查找的内置方法(合并切片)。但是,您可以使用如下附加方法:
s.setGrade(append([]int{80}, s.Grade[1:]...))
如果您必须更新两个成绩整数,那么您可以这样做:
s.setGrade(append([]int{80,95}, s.Grade[2:]...))
问题:
您当前的 setGrade 函数接受整数片段 → setGrade(grade []int)
在函数内部,您正在将现有切片 Grade
设置为传递给 setGrade 函数的切片 → s.Grade = grade
这是用全新的切片替换 Grade
。这不是你想做的。
解决方案
如果要更改切片中的特定值,您的函数应接受 2 个参数:
- 要更新的切片的索引
- 您要在该索引处设置的新值
您的函数应使用索引来识别应更改的值,然后将其设置为传入的值。像这样:
func (s *Student) setGrade(index int, newValue int) {
s.Grade[index] = newValue
}