none
Variables de tipo lista: AYUDA RRS feed

  • Pregunta

  • Hola amigos, tengo una lista que dentro tiene lista y dentro de ella tiene una variable tipo lista:

     public class gruposLista
        {
            public List<tipoRegistro> grupos;
        }
        public class tipoRegistro
        {
    
            public string nombre;
            public string rfc;
            public List<tipoMaterias> materia;
            public double promedio;
    
        }
        public class tipoMaterias
        {
            public string nameMateria;
            public double calificacion;
        }

    Al momento de utilizarla estaba poniendo tres listas por lo que esta mal pues cuando mando a imprimir se va a llenar todos esos registros en las listas, se repetira:

     
            List<gruposLista> grupos = new List<gruposLista>();
            List<tipoRegistro> alumnosDelGrupo = new List<tipoRegistro>();
            List<tipoMaterias> Materias = new List<tipoMaterias>();

    Al momento de Ingresarlo lo hace bien

    Pero cuando lo imprime ese es el ERROR

    Gracias por su atención¡¡¡¡

    martes, 11 de febrero de 2020 15:44

Respuestas

  • hola

    No tienes que crear 3 listas separadas, eso es incorrecto, se crea usando

    List<gruposLista> grupos = new List<gruposLista>();
    
    grupoLista g1 = new grupoLista();
    grupos.Add(g1);
    
    g1.grupos = new List<tipoRegistro>();
    
    tipoRegistro t1 = new tipoRegistro();
    t1.nombre = valor;
    t1.promedio = valor;
    g1.grupos.Add(t1);
    
    t1.materia = new List<tipoMaterias>();
    
    tipoMaterias m1 = new tipoMaterias();
    m1.nameMateria = valor;
    m1.calificacion = valor;
    t1.materia.Add(m1);

    la idea es ir instanciando y esto lo agregas a la propiedad de lista del objeto con el cual se relaciona

    en el ejemplo solo cree eun item en cada lista, por eso el "1" en las variables, pero puedes crear mas items

    lo que tienes es una jerarquia que debe trabajar junta

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 11 de febrero de 2020 16:57

Todas las respuestas

  • hola

    No tienes que crear 3 listas separadas, eso es incorrecto, se crea usando

    List<gruposLista> grupos = new List<gruposLista>();
    
    grupoLista g1 = new grupoLista();
    grupos.Add(g1);
    
    g1.grupos = new List<tipoRegistro>();
    
    tipoRegistro t1 = new tipoRegistro();
    t1.nombre = valor;
    t1.promedio = valor;
    g1.grupos.Add(t1);
    
    t1.materia = new List<tipoMaterias>();
    
    tipoMaterias m1 = new tipoMaterias();
    m1.nameMateria = valor;
    m1.calificacion = valor;
    t1.materia.Add(m1);

    la idea es ir instanciando y esto lo agregas a la propiedad de lista del objeto con el cual se relaciona

    en el ejemplo solo cree eun item en cada lista, por eso el "1" en las variables, pero puedes crear mas items

    lo que tienes es una jerarquia que debe trabajar junta

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 11 de febrero de 2020 16:57
  • Muchas  Gracias¡ Saludos

    martes, 11 de febrero de 2020 17:37
  • Hice algo a modo de ejemplo. Como verás, hice una modificación en la clase gruposLista. Este es el codigo:

    namespace ConsoleApplication1
    {
      class Program
      {
        static void Main(string[] args)
        {
          gruposLista ListaDeGrupos = new gruposLista();
          ListaDeGrupos.grupos = new List<List<tipoRegistro>>();
    
          Console.WriteLine("Cuantos gurpos quiere");
          int cantGrupos = int.Parse(Console.ReadLine());
          for (int indGr = 0; indGr < cantGrupos; indGr++)
          {
            List<tipoRegistro> Grupo = new List<tipoRegistro>();
    
            Console.WriteLine("Cuantas materias tiene el Gurpos N°: " + (indGr + 1).ToString() );
            int cantMaterias = int.Parse(Console.ReadLine());
    
            Console.WriteLine("Cuantos Alumnos tiene el Gurpos N°: " + (indGr + 1).ToString());
            int cantAlumnos = int.Parse(Console.ReadLine());
            for (int IndAl = 0; IndAl < cantAlumnos; IndAl++)
            {
              tipoRegistro al = new tipoRegistro();
              Console.WriteLine("Nombre del AlumnosN°: " + (IndAl + 1).ToString());
              al.nombre = Console.ReadLine();
              Console.WriteLine("rfc del AlumnosN°: " + (IndAl + 1).ToString());
              al.rfc = Console.ReadLine();
    
              al.materia = new List<tipoMaterias>();
              Console.WriteLine("Carga de Materias de: " + al.nombre + "...");
              for (int IndMat = 0; IndMat < cantMaterias; IndMat++)
              {
                tipoMaterias mat = new tipoMaterias();
                Console.WriteLine("Nombre de Materia N°: " + (IndMat + 1).ToString());
                mat.nameMateria = Console.ReadLine();
                Console.WriteLine("Calificacion de Materia N°: " + (IndMat + 1).ToString());
                mat.calificacion = Double.Parse(Console.ReadLine());
                al.materia.Add(mat);
              }
              al.promedio = al.materia.Sum(x => x.calificacion) / cantMaterias;
              Grupo.Add(al);
            }
            ListaDeGrupos.grupos.Add(Grupo);
          }
    
          foreach (List<tipoRegistro> gr in ListaDeGrupos.grupos)
            MostrarDatosDeGrupo(gr);
    
          Console.ReadKey();
        }
    
        static void MostrarDatosDeGrupo(List<tipoRegistro> grupo)
        {
          foreach (tipoRegistro alumno in grupo)
          {
            Console.WriteLine("Alumnos: " + alumno.nombre);
            Console.WriteLine("rfc: " + alumno.rfc);
            Console.WriteLine("Pormedio: " + alumno.promedio);
            Console.WriteLine("******* Materias ************"); 
            foreach (tipoMaterias materia in alumno.materia)
            {
              Console.WriteLine("Materia : " + materia.nameMateria);
              Console.WriteLine("Nota: " + materia.calificacion); 
            }
          }
        }
      }
    
      public class gruposLista
      {
        public List<List<tipoRegistro>> grupos;
      }
    
      public class tipoRegistro
      {
    
        public string nombre;
        public string rfc;
        public List<tipoMaterias> materia;
        public double promedio;
    
      }
      public class tipoMaterias
      {
        public string nameMateria;
        public double calificacion;
      }
    
      
    }
    

    martes, 11 de febrero de 2020 19:36