6237 Programmering II (Csharp) Agenda/List sort/find

From Teknologisk videncenter
Jump to: navigation, search

List sort/find

Når vi har oprette klassen Person kan vi også lave en liste af personer. Da både larer og elev nedarver fra Person kan vi også gemme disse i listen. Det foregår sådan her.

static void Main(string[] args)
{
	Laerer l1 = new Laerer("Tommy", "tommys@mail.dk", 25000);
	
	Elev e1 = new Elev("Jens", "jens@mail.dk", "Hold1");
	
	Person p1 = new Laerer("Holger", "holgers@mail.dk",230000);

	List<Person> pLst = new List<Person>();
	pLst.Add(p1);
	pLst.Add(e1);
	pLst.Add(l1);
}

Det smarte ved at sætte personer i en list er at vi nu kan anvende indbyggede funktioner i list til at sortere og søge i listen. Den nemmeste måde er at anvende lambdaexpressions

static void Main(string[] args)
{
	Person p1 = new Person("Tommy", "tommys@mail.dk");		
	Person p2 = new Person("Jens", "jens@mail.dk");
	Person p3 = new Person("Holger", "holgers@mail.dk");
	List<Person> pLst = new List<Person>();
	pLst.Add(p1);
	pLst.Add(p2);
	pLst.Add(p3);

        //Her findes første person i listen med navnet Holger
        Person holger = pLst.Find(x =>(x.Navn == "Holger"));

        //Her findes alle personer med navnet Holger
	List<Person> holgerLst = pLst.FindAll(x =>(x.Navn == "Holger"));
}

På samme måde kan vi anvende listen til at sortere vores personer. Det eneste vi skal gøre at at lave et lambdaexpression der fortæller hvordan vi vil sortere.

static void Main(string[] args)
{
	Person p1 = new Person("Tommy", "tommys@mail.dk");		
	Person p2 = new Person("Jens", "jens@mail.dk");
	Person p3 = new Person("Holger", "holgers@mail.dk");
	List<Person> pLst = new List<Person>();
	pLst.Add(p1);
	pLst.Add(p2);
	pLst.Add(p3);

        //Her sorteres listen på personens navn
        pLst.Sort((x,y) =>(String.Compare(x.Navn,y.Navn));

        //Hvis der er ens navne kan vi vælge at sortere på emails
        pLst.Sort((x, y) => 
            {
                if (x.Navn != y.Navn) return String.Compare(x.Navn, y.Navn);
                return String.Compare(x.Email, y.Email);
            });
}




Alternativt kan man vælge at sortere med delegates

Sort with delegate