class Student //先构建一个结构
{
public int year;
public string name;
}
List<Student> stus = new List<Student>();
stus.Add(new Student() { year = 1996, name = "啊三" });
stus.Add(new Student() { year = 1999, name = "牛二" });
stus.Add(new Student() { year = 2002, name = "牛三" });
stus.Add(new Student() { year = 1994, name = "卡尔文" });
stus.Add(new Student() { year = 2004, name = "狗头" });
1.List自带方法:Find 查找单个元素 | FindIndex 查找元素的下标 | FindAll 查找符合条件的元素并返回数组
Student s = stus.Find(item => item.name == "狗头");//查找符合条件的首个元素 返回的<T> item
Console.WriteLine("student:" + s.name + " " + s.year);
int index = stus.FindIndex(item => item.name == "狗头");//查找符合条件的首个元素的下标 返回的 int
Console.WriteLine("index:" + index);
var lis = stus.FindAll(item => item.year > 2000);//查找符合条件的所以元素 返回的 list
foreach (var item in lis)
{
Console.WriteLine("findall" + item.year + " " + item.name);
}
tips:
string name = stus.Find(item => item.year == 2002).name;//查找出生时间是2002年的学生,没出问题
Console.WriteLine("name:" + name);
string name1 = stus.Find(item => item.year == 2003)?.name ?? "Alice";
//查询2003很明显会报错,所以使用[ ?.]处理报空,然后用[ ?? ]给默认值。注意:[ .? ]是高版本特性,低版本用不了。
Console.WriteLine("name1:" + name1);
2.Linq:Where 筛选 | OrderBy 排序 | select 投影
var list1 = stus.Where(item => item.year < 2000).ToList();//筛选年小于2000的学生
foreach (var item in list1)
{
Console.WriteLine("where:" + item.year + " " + item.name);
}
var list2 = stus.Where(item => item.year < 2000).OrderBy(item => item.year).ToList();//筛选排序年小于2000的学生
foreach (var item in list2)
{
Console.WriteLine("OrderBy:" + item.year + " " + item.name);
}
var list3 = stus.Where(item => item.year < 2000).OrderBy(item => item.year).Select(item => new { age = 2022 - item.year, nick = item.name }).ToList();//筛选排序年小于2000的学生重新构建结构
foreach (var item in list3)
{
Console.WriteLine("Select:" + item.age + " " + item.nick);
}