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

From Teknologisk videncenter
Jump to: navigation, search
(Created page with " <source lang=csharp> class Program { public static int SortByNavn(Person x, Person y) { return String.Compare(x.Navn, y.Navn); } public static int SortByEmail(Person x, ...")
 
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
 +
En delegate er et link til en metode i programmet. Vi kan altså oprette en metode der sammenligner to personer og fortælle sort at det er den metode der skal anvendes ved sortering. Dette kaldes call by deletage.
 +
 +
Her ses metoderne SortByName og SortByEmail.
 +
Sortering foregår således.
 +
  
 
<source lang=csharp>
 
<source lang=csharp>
Line 56: Line 61:
 
</source>
 
</source>
  
Hvis det skal være rigtig smart kan vi lave funktionen i vha en anden funktion. Her er det FindByName der returnerer en funktion der finder en navn.
+
Hvis det skal være rigtig smart kan vi lave funktionen vha. en anden funktion. Her er det FindByName der returnerer en funktion der finder en navn.
 
<source lang=csharp>
 
<source lang=csharp>
 
class Program
 
class Program

Latest revision as of 13:20, 7 October 2015

En delegate er et link til en metode i programmet. Vi kan altså oprette en metode der sammenligner to personer og fortælle sort at det er den metode der skal anvendes ved sortering. Dette kaldes call by deletage.

Her ses metoderne SortByName og SortByEmail. Sortering foregår således.


class Program
{

	public static int SortByNavn(Person x, Person y)
	{
		return String.Compare(x.Navn, y.Navn);
	}

	public static int SortByEmail(Person x, Person y)
	{
		return String.Compare(x.Email, y.Email);
	}

	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);

		pLst.Sort(SortByNavn);
		pLst.Sort(SortByEmail);
	}
}

På samme måde kan vi også anvende indbyggede søgefunktioner. Her skal vi lave en metode programmet kan anvende til at fortælle hvad der søges efter. I dette tilfælde navnet Jens.

class Program
{
	String searchName;
	static bool findName(Person p)
	{
		return p.Navn == searchName;
	}

	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);

		searchName = "Jens";
		Person p = pLst.Find(findName);
	}
}

Hvis det skal være rigtig smart kan vi lave funktionen vha. en anden funktion. Her er det FindByName der returnerer en funktion der finder en navn.

class Program
{
	static String searchName;
	static bool findName(Person p)
	{
		return p.Navn == searchName;
	}

	static Predicate<Person> FindByName(String name)
	{
		return delegate(Person p)
		{
			return p.Navn == name;
		};
	}

	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);

		Person p = pLst.Find(FindByName("Holger"));
	}
}