Lambda funksjoner
Eksempel 1
Vi skriver en filterfunksjon som plukker ut navn fra en liste basert på en alfabetisk sammenligning.
Func<string, string, bool> filter = (s, t) => s.CompareTo(t) > 0;
private void buttonStrings_Click(object sender, EventArgs e)
{
string[] names = { "Arnold","Berit","Hans", "Jens", "Sverre",
"Harald", "Hanne", "Marit"};
IEnumerable<string> expr = from s in names
where filter(s, "Hanne")
orderby s
select s;
listBox1.Items.Clear();
foreach (string item in expr)
listBox1.Items.Add(item);
}
Eksempel 2
Vi skriver en filterfunksjon som plukker ut objekter fra en liste basert på sammenligning av alder.
Func<person, int, bool> pfilter = (p, age) => p.Age > age;
private void buttonObjects_Click(object sender, EventArgs e)
{
person[] plist = {new person("ole",1990),
new person("jens",2005),
new person("kari",1996) };
IEnumerable<person> expr = from p in plist
where pfilter(p, 10)
orderby p.Age
select p;
listBox1.Items.Clear();
foreach (person item in expr)
listBox1.Items.Add(item.Name);
}
personklassen er slik:
public class person
{
String name;
int faar;
public person(String n, int f) { name = n; faar = f; }
public int Age { get { return DateTime.Now.Year - faar; } }
public string Name { get { return name; } }
}
Eksempel 3
Vi skriver en filterfunksjon som plukker ut deltagere i olympiader basert på distanse. Datagrunnlaget er en XML-fil beskrevet i modulen Noen datasett.
Func<XElement, String, bool> ofilter = (p, distance) =>
((XElement)p.Parent).Attribute("dist").Value.CompareTo(distance) == 0;
private void buttonXML_Click(object sender, EventArgs e)
{
XDocument xdoc = new XDocument();
xdoc = XDocument.Load(
"http://www.it.hiof.no/~borres/commondata/olympiade/all_results.xml"
);
List<XmlNode> athletList = new List<XmlNode>();
var runners = from a in xdoc.Descendants("athlet")
where ofilter((XElement)a, "100m")
select new
{
theName = a.Element("name").Value,
theResult = a.Element("result").Value
};
listBox1.Items.Clear();
listBox1.DisplayMember = "theName";
foreach (var runner in runners)
listBox1.Items.Add(runner);
}