Difference between revisions of "6237 Programmering II (Csharp) Agenda/List sort/find"

From Teknologisk videncenter
Jump to: navigation, search
(List sort/find)
(List sort/find)
Line 17: Line 17:
 
</source>
 
</source>
 
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.
 
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
  
 +
<source lang=csharp>
 +
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"));
  
[[/Sort_with_delegate|Sort with delegate]]
+
        //Her findes alle personer med navnet Holger
 +
List<Person> holgerLst = pLst.FindAll(x =>(x.Navn == "Holger"));
 +
}
 +
</source>
 +
 
 +
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.
  
Endelig kan man anvende lambda expressions
 
 
<source lang=csharp>
 
<source lang=csharp>
 
static void Main(string[] args)
 
static void Main(string[] args)
Line 34: Line 51:
 
pLst.Add(p3);
 
pLst.Add(p3);
  
Person p = pLst.Find(x =>(x.Navn == "Holger"));
+
        //Her sorteres listen på personens navn
 +
        pLst.Sort((x,y) =>(String.Compare(x.Navn,y.Navn));
  
         //Eller evt.
+
         //Hvis der er ens navne kan vi vælge at sortere på emails
         pLst.Sort((x,y) =>(String.Compare(x.Navn,y.Navn));
+
         pLst.Sort((x, y) =>  
 +
            {
 +
                if (x.Navn != y.Navn) return String.Compare(x.Navn, y.Navn);
 +
                return String.Compare(x.Email, y.Email);
 +
            });
 
}
 
}
 
</source>
 
</source>
  
 +
Alternativt kan man vælge at sortere med delegates
 +
 +
[[/Sort_with_delegate|Sort with delegate]]
 
[[Category:6237 Programmering II]]
 
[[Category:6237 Programmering II]]

Revision as of 13:14, 7 October 2015

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