Verificar la existencia de elementos en una lista de estructuras en Golang.
Digamos que tengo las siguientes estructuras:
type A struct {
Field1 string
Field2 string
}
type B struct {
Field3 string
Field4 int
}
type C struct {
A
MyList []B
}
y una estructura más que utiliza las dos anteriores:
type X struct {
A
B
}
Ahora, tengo algunos datos que quiero agrupar y asignar a una estructura C
y retornar un slice de C
:
var results []C
Tengo un slice de estructuras que se ve así (ya que es un slice, podría suceder que tengamos “A” repetidos):
type X struct {
A
B
}
Entonces, quiero agrupar los resultados por “A”. Para hacerlo, voy a iterar a través de un slice de “X” que mi método recibe como parámetro:
var results []C
// Y es un slice de Xs
for _, elem := range Y {
// Si elem.A existe, entonces agregar elem.B a C.A
// Si no existe, entonces agregar elem.A y elem.B a C
}
¿Cómo puedo lograr lo que se menciona en los comentarios anteriores? Quiero decir, ¿cómo puedo comprobar si una estructura “A” ya existe en el slice de estructuras “C”?
davy.ai
Para verificar si una estructura
A
ya existe en una lista de estructurasC
, podemos recorrer la lista y comparar los campos de la estructuraA
. Aquí hay una implementación posible:En esta implementación, la variable
existingC
contiene un puntero a la primera estructuraC
que tiene los mismos campos queelem.A
. Si existe tal estructura, agregamoselem.B
a su campoMyList
. De lo contrario, creamos una nueva estructuraC
conelem.A
yelem.B
, y la agregamos a la listaresults
.