go - Índice de segmento dentro de la función principal cuando se usa setGrade()

CorePress2024-01-25  11

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)

}

El problema es que cuando estoy haciendo setGrade en la función principal se comporta como nuevo(grado) y me da esto

{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80] 20}

Aquí, el segmento s.setGrade([]int{10}) da el resultado {Klaus [10] 20} Se me ocurrió una idea estática y estúpida al usar un índice en

func (s *Student) setGrade(grade []int) {
    s.Grade[0] = grade
}

pero tengo un problema, tengo que dar el número estático cuando la calificación cambia con un índice específico

SALIDA requerida:-

{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80 75 100] 20}

Solución requerida:- De alguna manera quiero dar un índice específico en la función principal. Imagine Python de esta manera. s.setGrade(grade[0]). Sé que esto no funcionará en GO, ¡pero quiero hacerlo de esta manera! ¡O déjame saber si hay alguna otra forma de hacerlo!`

No estoy seguro de lo que quieres hacer. ¿Puedes aclarar la última parte? ¿La función setGrade debería cambiar una calificación o agregar una nueva calificación al segmento de calificaciones? Si solo desea cambiar el primer elemento del sector: s.Grade[0] = la calificación es correcta.

-cristiano

28 de marzo de 2021 a las 8:42

Si desea cambiar una calificación específica, ¿por qué no aprueba el índice de la calificación en sí?como s.setGrate(80, 0) eso significa cambiar el grado 0 a 80.

- mallakati

28 de marzo de 2021 a las 8:46

@meshkati, ¿puedes proporcionarme el código correcto para asegurarme de que sea correcto? ¡No recibí tu respuesta!

– cookies

28 de marzo de 2021 a las 9:13



------------------------------------

No existe ningún método integrado para lo que estás buscando (fusionar sectores). Sin embargo, puedes usar el método de agregar como:

s.setGrade(append([]int{80}, s.Grade[1:]...))

Si tuvieras que actualizarSi tienes dos entradas de grado, entonces podrías haber hecho:

s.setGrade(append([]int{80,95}, s.Grade[2:]...))

1

Encantado de poder ayudarte :)

- Bhojendra Rauniyar

28 de marzo de 2021 a las 8:56



------------------------------------

El problema:

Su función setGrade actual acepta una porción de números enteros → setGrade(grade []int)

Dentro de la función, está configurando el sector existente, Grade, en el sector pasado al setGrad.e función → s.Grade = calificación

Esto reemplaza Calificación con una porción completamente nueva. Esto no es lo que quieres hacer.

La solución

Si desea cambiar un valor específico en el segmento, su función debe aceptar 2 parámetros:

El índice del segmento que desea actualizar. El NUEVO valor que desea establecer en ese índice

Su función debe usar el índice para identificar el valor que debe cambiarse y luego establecerlo en el valor pasado. Así:

    func (s *Student) setGrade(index int, newValue int)  {
        s.Grade[index] = newValue
    }

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare