• Jueves 2 de Mayo de 2024, 16:30

Autor Tema:  Ordenamiento de una lista  (Leído 2804 veces)

GLaquia_Multimedia

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Ordenamiento de una lista
« en: Jueves 8 de Octubre de 2009, 16:34 »
0
Hola amigos, soy David y como se darán cuenta soy nuevo en el foro. Actualmente llevo un curso de C# y necesito que me expliquen como puedo ordenar una lista a la que le ingreso un nombre con 2 apellidos y que el apellido paterno me lo ordene de orden alfabetico. un ejemplo

// Nombres ingresados
1 David Echeverria Hinojosa
2 Valeria Fernandez Delgado
3 Gustavo Ortega Cardenas
4 Andres Manuel Huerta Treviño

//Ordenados alfabeticamente por apellido paterno

Echeverria Hinojosa David
Fernandez Delgado Valeria
Huerta Treviño Andres Manuel
Ortega Cardenas Gustavo

Es asi como las listas de los institutos para pasar lista a los alumnos. El proyecto lo estoy haciendo en modo de consola pero si me pudieran decir como hacerlo visual seria genial :D

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Ordenamiento de una lista
« Respuesta #1 en: Jueves 8 de Octubre de 2009, 18:35 »
0
bueno lo suyo seria meter todos los nombres con apellidos en una matriz (puedes usar un bucle para ir metiendolos de 1 a 1 y que al pulsar enter sin nombre escrito proceda al ordenamiento) a continuación, en un bucle, podrias implementar algo parecido a esto:

alumnos seria la matriz

Código: C#
  1.  
  2.                 string temp = alumnos[a];
  3.  
  4. //separamos los nombres en la matriz cadena
  5.                 char[] seps = { ' ' };                  
  6.                 string[] cad = temp.Split(seps);
  7.  
  8. //reorganizamos el nombre==> apellido apellido Nombre Nobre .
  9. //i vamos metiendo el resultado en una nueva matriz, Ordenados
  10.  
  11.                 if (cad.Length == 1)
  12.                     Ordenados[a] = cad[0];
  13.                 else if (cad.Length == 2)
  14.                     Ordenados[a] = cad[1] + " " + cad[0];
  15.                 else if (cad.Length == 3)
  16.                     Ordenados[a] = cad[1] + " " + cad[2] + " " + cad[0];
  17.                 else
  18.                 {
  19.                     for (int i = 2; i < cad.Length; i++)
  20.                         Ordenados[a] += cad[i] + " ";
  21.                     Ordenados[a] += cad[0] + " " + cad[1];
  22.                 }
  23.  
  24.  

ahora solo te queda ordenar los nombres alfabeticamente, la clase Array te proporciona un metodo justo para eso, el Sort(xxxxx);

bueno, te dejo mas o menos la idea, no te pongo el ejemplo completo para que investigues y comprendas como funciona, sinos no te serviria de nada.
De todas formas si te quedas con cualquier duda no dudes en pedirla.

bueno y lo del tema visual es hacero en Aplicacion para Windows (si estas usando visual studio) el codigo de ordenamiento seria el mismo. Te recomiendo trastees un poco con eso antessi ahun no lo sabes utilizar, ya veras que es facil utilizarlo.

saludos

GLaquia_Multimedia

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Ordenamiento de una lista
« Respuesta #2 en: Jueves 8 de Octubre de 2009, 22:50 »
0
Gracias por la respuesta pero aun no comprendi muy bien. Tengo que hacer una clase nueva llamada Array? Creo que debi poner lo que tenia de codigo para nomas ver lo que me hacia falta

Esto es lo que llevo de codigo en aplicacion de consola :

Citar
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
        class Program
        {
        struct Datos
        {
            public int Id;
            public string Nombre;
            public string Carrera;
        }
        static void Main(string[] args)
        {
            Datos[] Vec = new Datos[11];
            int I;
            for (I = 0; I < 11; I++)
            {
                Vec.Id = I;
                Console.Write("Nombre a registrar: ");
                Vec.Nombre = Console.ReadLine();
                Console.Write("Carrera: ");
                Vec.Carrera = Console.ReadLine();
            }
            Console.Clear();
            for (I = 0; I < 11; I++)
                Console.WriteLine("Id: " + Vec.Id.ToString() +", Carrera: "+Vec.Carrera+ ", Nombre: " + Vec.Nombre);
            Console.ReadLine();
        }
    }
}


Lo que hace este codigo es poner de manera secuencial los nombres que son ingresados pero los despliega en el mismo orden en los que los registro, y lo que quiero es que al momento de que termino de ingresar se acomoden los apellidos alfabeticamente independientemente del orden en el que hayan sido agregados.


Ejemplo:

// Nombres ingresados
1 David Echeverria Hinojosa
2 Valeria Fernandez Delgado
3 Gustavo Ortega Cardenas
4 Andres Manuel Huerta Treviño

//Ordenados alfabeticamente por apellido paterno

1. Echeverria Hinojosa David
2. Fernandez Delgado Valeria
3. Huerta Treviño Andres Manuel
4. Ortega Cardenas Gustavo

Aqui dio la casualidad de que david y valeria les tocara el mismo lugar en el que fueron ingresados pero gustavo que fue el 3ero en ingresar paso a ser el 4to debido a su primer apellido. Y eso es en donde estoy atorado para lograr el ordenamiento que logro intentar.

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Ordenamiento de una lista
« Respuesta #3 en: Jueves 8 de Octubre de 2009, 23:52 »
0
prueba con esto haber que tal:

Código: C#
  1.  
  2. static void Main(string[] args)
  3.         {
  4.             string nombre;
  5.             List<string> alumnos = new List<string>();
  6.             Console.WriteLine("Inserte nombres. Cuando termine pulse enter");
  7.            
  8.             nombre = Console.ReadLine();
  9.             while (nombre != "")
  10.             {
  11.                 alumnos.Add(nombre);
  12.                 nombre = Console.ReadLine();
  13.             }
  14.  
  15.             string[] Ordenados = new string[alumnos.Count];
  16.  
  17.             for (int a = 0; a < alumnos.Count; a++)
  18.             {
  19.                 string temp = alumnos[a];
  20.                 char[] seps = { ' ' };
  21.                 string[] cad = temp.Split(seps);
  22.  
  23.                 if (cad.Length == 1)
  24.                     Ordenados[a] = cad[0];
  25.                 else if (cad.Length == 2)
  26.                     Ordenados[a] = cad[1] + " " + cad[0];
  27.                 else if (cad.Length == 3)
  28.                     Ordenados[a] = cad[1] + " " + cad[2] + " " + cad[0];
  29.                 else
  30.                 {
  31.                     for (int i = 2; i < cad.Length; i++)
  32.                         Ordenados[a] += cad[i] + " ";
  33.                     Ordenados[a] += cad[0] + " " + cad[1];
  34.                 }
  35.             }
  36.  
  37.             Array.Sort(Ordenados);
  38.             foreach (string C in Ordenados)
  39.                 Console.WriteLine(C);            
  40.  
  41.         }
  42.  
  43.  
  44.  
  45.  

ahora no tengo mucho tiempo para ver tu codigo, te dejo esto haber si te puede ayudar en algo, si no avisa y mañana ya te lo miro con mas tiempo.

Saludos :)

GLaquia_Multimedia

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Ordenamiento de una lista
« Respuesta #4 en: Viernes 9 de Octubre de 2009, 00:52 »
0
Orale si sale ordenado como queria, gracias amigo.

En este mismo codigo que me facilitaste le quiero ingresar una variable que muestre la carrera que el alumno esta estudiando y el orden en el cual fueron ingresados.

Ejemplo:

// Nombres ingresados
1 David Echeverria Hinojosa Multimedia primero en ser ingresado
2 Valeria Fernandez Delgado Mercadotecnia segundo ""
3 Gustavo Ortega Cardenas Comunicaciones tercero ""
4 Andres Manuel Huerta Treviño Derecho cuarto ""

//Ordenados alfabeticamente por apellido paterno

1. Echeverria Hinojosa David  .... Multimedia [ Fue el primero en ser insertado y el primero en ser ordenado debido a su apellido paterno]
2. Fernandez Delgado Valeria  .... Mercadotecnia [Fue la segunda en ser insertada y la segunda en ser ordenada debido a su apellido paterno]
3. Huerta Treviño Andres Manuel  .... Comunicaciones [Fue el cuarto en ser insertado y el tercero en ser ordenado]
4. Ortega Cardenas Gustavo .... Derecho [Fue el tercero en ser insertado y el  cuarto en ser ordenado]

y despues haya una opcion  para buscar a un alumno que fue ingresado en la lista y sea eliminado de ella si me explico. Lamento si pido mucho esque en verdad soy muy nuevo en e esto de las listasy pues si necesito que alguien me eche la mano.  ^_^

Legend

  • Nuevo Miembro
  • *
  • Mensajes: 7
  • Nacionalidad: pe
    • Ver Perfil
Re: Ordenamiento de una lista
« Respuesta #5 en: Viernes 9 de Octubre de 2009, 08:03 »
0
[list type=]
Bueno le agregue la opcion de eliminar al codigo del otro amigo espero te sirva  B)
si le falta algo avisa para ver q se puede hacer  \n\t\t\t\t\t\t\t\t\t
<' + '/div>\n\t\t\t\t\t\t\t\t\t