Sortowanie trzech list

0

Witam

Zalożylem konto na Wszym forum ponieważ mam problem z pewnym zagadnienie. Od niedawna zacząłem uczyć się C# i pojawiło się pierwsze zadanie z którym sobie nie moge poradzić mianowicie sortowanie trzech list (wiem że napiszecie bylo wiele razy ale ja nie mogę tego zaimplementować do mojego programu. Do rzeczy jako zadanie była do zrobienia książka telefoniczna która ma dzialać na takie zasadzie: Należy wpisać z klawiatury Imie, nazwisko oraz numer telefonu nastepnie powinna być możliwość sortowania po Nazwisku, Imieniu i numerze oraz kasowania wpisu. Wirze że pomożecie i podacie ca należy wpisać case 3, 4, 5, 6, tak aby to wszystko działało. Co do sortowania to trzeba połączyć listy przez np wyrażenie lambda

list.Sort((p1, p2) => p1.X.CompareTo(p2.X));

ale jak to zastosować to nie wiem

Poniżej kod:

Pozdrawiam i czekam na Waszą pomoc :)

namespace ConsoleApplication5
{
    class Program
    {
        static void Menu()
        {
            Console.Clear();
            Console.WriteLine("1 - Dodaj imię i nyazwisko oraz numer telefonu");
            Console.WriteLine("2 - wypisz elementy listy");
            Console.WriteLine("3 - sortuj według imienia");
            Console.WriteLine("4 - sortuj według nazwiska");
            Console.WriteLine("5 - sortuj po numerze telefonu");
            Console.WriteLine("6 - usuń wpis");
            Console.WriteLine("9 - zakoncz");
            Console.Write("> ");
        }

        static void Main(string[] args)
        {
            bool wyjscie = false;
            string wybor;
            int x;

            List<string> imie = new List<string>();
            List<string> nazwisko = new List<string>();
            List<int> numer = new List<int>();

            do
            {
                Menu();
                wybor = Console.ReadLine();
                switch (wybor)
                {
                    case "1":
                        string imi, naz, num;

                        Console.Write("Podaj imie:           ");
                        imi = Console.ReadLine();
                        imie.Add(imi);


                        Console.Write("Podaj nazwisko:       ");
                        naz = Console.ReadLine();

                        nazwisko.Add(naz);

                        Console.Write("Podaj numer telefonu: ");
                        num = Console.ReadLine();
                        x = int.Parse(num);
                        numer.Add(x);


                        break;
                    case "2":

                        for (int i = 0; i < imie.Count; i++)
                        {
                            Console.WriteLine(imie[i] + " " + nazwisko[i] + " " + numer[i]);
                        }
                    
                        Console.ReadKey();
                        break;
                    case "3":
                        
                        Console.ReadKey();
                        break;
                    case "4":
                        
                        Console.ReadKey();
                        break;
                    case "5":
                       
                        Console.ReadKey();
                        break;
                    case "6":
                        Console.WriteLine("6 - usuń wpis");
                        break;
                    case "9":
                        wyjscie = true;
                        break;
                    default:
                        Console.WriteLine("Wybierz właściwą opcję");
                        Console.WriteLine("1 - dodaj do listy");
                        Console.WriteLine("2 - wypisz elementy listy");
                        Console.WriteLine("3 - sortuj liste");
                        Console.WriteLine("9 - zakoncz");
                        Console.ReadKey();
                        break;
                }
            } while (wyjscie == false);
        }
    }
}

 
1

To nie lepiej tak:

 
class Osoba{
public string Imie {get; set;}
public string Nazwisko {get; set; }
public int Numer {get; set;}
}

trzymac to w liscie List<Osoba> listaOsob

Sortowac listaOsob.OrderBy(p=>p.Imie/Nazwisko/Numer)

I wtedy nie ma problemu ?

0

Hej Dzięki za odpowiedź a możesz mi to wrzucić do tego kodu co mam bo niestety jestem za tępy aby sobie z tym poradzić

Dzieki za poświęcony czas.

0

Zamiast tego:

List<string> imie = new List<string>();
List<string> nazwisko = new List<string>();
List<int> numer = new List<int>();

Zrób tak:

List<Osoba> osoby = new List<Osoba>

A dalej to już pójdzie z górki.

0

ja dodam że zapis

listaOsob.OrderBy(p=>p.Imie)

wymaga .NET 3.5, a zapis

listaOsob.Sort((p1,p2)=>p1.Imie.CompareTo(p2.Imie));

wymaga .NET 2.0.

Upraszczając.

0

Hej

Sorki ale jakoś nic nie wychodzi może podać jakiś działający prosty przykład (programik) tak aby to zrozumieć.

0

Prosty program, pokazuje jak sortować listę na różne sposoby (zapis x=>x.Cos, albo ogólnie x=>Cokolwiek to tzw. wyrażenie lambda - mniejsza z tym co robi, na razie wystarczy że działa :>)

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public double Height { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var peoples = new List<Person>
        {
            new Person { Name = "Stefan", Age = 19, Height = 180, },
            new Person { Name = "Zosia",   Age = 23, Height = 150, },
            new Person { Name = "Krzychu", Age = 40, Height = 210, },
            new Person { Name = "Zosia", Age = 75, Height = 190, },
        };


        Print(peoples, "Początkowo");

        peoples = peoples.OrderBy((x) => x.Name).ToList();
        Print(peoples, "Posorotwane po imieniu");

        peoples = peoples.OrderBy((x) => x.Height).ToList();
        Print(peoples, "Posorotwane po wysokości");

        peoples = peoples.OrderBy((x) => x.Age).ToList();
        Print(peoples, "Posorotwane po wieku");

        Console.ReadKey(true);
    }

    static void Print(List<Person> ls, string desc)
    {
        Console.WriteLine();
        Console.WriteLine("============{0}============", desc);
        foreach (var p in ls)
        {
            Console.WriteLine("{0}, {1} cm, {2} lat", p.Name, p.Height, p.Age);
        }
    }
}
0

@Tezcatlipoca, chciało Ci się tyle linii poświęcać na wstawienie obiektów do listy?

var peoples = new List<Person>
{
    new Person { Name = "Stefan", Age = 19, Height = 180, },
    new Person { Name = "Zosia",   Age = 23, Height = 150, },
    new Person { Name = "Krzychu", Age = 40, Height = 210, },
    new Person { Name = "Zosia", Age = 75, Height = 190, },
};
0

Hej "Tezcatlipoca" ale wszystkie cztery listy wyglądają tak samo ....

0

Bo nie przypisał ich nigdzie :)

poeple = poeple.OrderBy(x=>x.cos).ToList();

Tak zrób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1