Пример #1
0
        /// <summary>
        /// Obtiene la tabla de estados generales, similar a las que se ve en wikipedia
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        /// <param name="cabeceras">Un arreglo donde cada elemento
        /// inidica si la olimpiada tiene resultados para cualquier estado</param>
        /// <returns>El diccionario de los estados</returns>
        public static Dictionary <string, Dictionary <string, Medallero> > obtenerTablaEstadosGeneral(TipoOlimpiada tipoOlimpiada, out bool[] cabeceras)
        {
            Dictionary <string, Dictionary <string, Medallero> > estados = new Dictionary <string, Dictionary <string, Medallero> >();

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from Medallero where tipo = ");
            query.Append((int)TipoMedallero.ESTADO_POR_OMI);
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            // Un hashset para poder construir el arreglo de cabeceras
            HashSet <string> olimpiadasConResultados = new HashSet <string>();

            foreach (DataRow r in table.Rows)
            {
                // Obtengo los datos de la tabla a un objeto medallero
                Medallero m = new Medallero();
                m.llenarDatos(r);
                string estado = m.clave.Substring(0, 3);

                // Obtengo el medallero del estado
                Dictionary <string, Medallero> medallero;
                if (!estados.TryGetValue(estado, out medallero))
                {
                    medallero = new Dictionary <string, Medallero>();
                    estados.Add(estado, medallero);
                }

                // Agrego el medallero con la olimpiada
                medallero.Add(m.omi, m);

                // Ponemos que la olimpiada tiene resultados en el hashset
                if (!olimpiadasConResultados.Contains(m.omi))
                {
                    olimpiadasConResultados.Add(m.omi);
                }
            }

            // Construimos el arreglo de cabeceras
            List <Olimpiada> olimpiadas = Olimpiada.obtenerOlimpiadas(tipoOlimpiada);

            cabeceras = new bool[olimpiadas.Count];

            for (int i = 0; i < olimpiadas.Count; i++)
            {
                cabeceras[i] = olimpiadasConResultados.Contains(olimpiadas[i].numero);
            }

            return(estados);
        }