class FilmFilteringAndSorting
{
class Film
{
public string Name { get; set; }
public int Year { get; set; }
}
static void Main() //列表的过滤 排序,操作
//用Lambda表达是处理一个电影列表
{
var films = new List<Film> //初始化
{
new Film {Name="Jaws", Year=1975},
new Film {Name="Singing in the Rain", Year=1952},
new Film {Name="Some like it Hot", Year=1959},
new Film {Name="The Wizard of Oz", Year=1939},
new Film {Name="It's a Wonderful Life", Year=1946},
new Film {Name="American Beauty", Year=1999},
new Film {Name="High Fidelity", Year=2000},
new Film {Name="The Usual Suspects", Year=1995}
};
Action<Film> print = //初始化,之后调用 创建可用的列表打印委托
film => Console.WriteLine("Name={0}, Year={1}", film.Name, film.Year);
Console.WriteLine("All films");
films.ForEach(print); //调用print 打印原始列表
Console.WriteLine();
Console.WriteLine("Oldies");
films.FindAll(film => film.Year < 1960) //条件一直判断 创建过滤过的列表
.ForEach(print); //判断完再打印
Console.WriteLine();
Console.WriteLine("Sorted");
films.Sort((f1, f2) => f1.Name.CompareTo(f2.Name)); //有两个变量
//一直再比较 对原始列表排序
films.ForEach(print); //输出结果
}
}
为多部电影的名称和发行年份作为实力数据。 程序先打印原始列表,然后创建并打印
只包含老电影的过滤列表。最后,按电影名称排序,并打印原始列表
筛选1960前的电影 没有做任何修改,列表还是原始列表。对列表的每一部电影执行
Lambda表达式 看是否包含到已过滤列表中。
源代码将Lambda表达式作为一个方法实参来使用,实际编译器会创建下面的方法
private static bool SomeAutoGeneratedName(Film film)
{
return film.Year < 1960;
}
调用FindAll 方法会变成
films.FindAll(new Predicate<Film>(SomeAutoGnenratedName))
输出结果
All films
Name=Jaws, Year=1975
Name=Singing in the Rain, Year=1952
Name=Some like it Hot, Year=1959
Name=The Wizard of Oz, Year=1939
Name=It's a Wonderful Life, Year=1946
Name=American Beauty, Year=1999
Name=High Fidelity, Year=2000
Name=The Usual Suspects, Year=1995
Oldies
Name=Singing in the Rain, Year=1952
Name=Some like it Hot, Year=1959
Name=The Wizard of Oz, Year=1939
Name=It's a Wonderful Life, Year=1946
Sorted
Name=American Beauty, Year=1999
Name=High Fidelity, Year=2000
Name=It's a Wonderful Life, Year=1946
Name=Jaws, Year=1975
Name=Singing in the Rain, Year=1952
Name=Some like it Hot, Year=1959
Name=The Usual Suspects, Year=1995
Name=The Wizard of Oz, Year=1939