集合的筛选

经常在项目中遇到要删除集合中某些元素,而用foreach遍历集合时,不能在遍历集合时直接移除要移除的元素,

在这里总结了集合筛选的方法:

static void Main(string[] args)
{
 List<Person> personList = new List<Person>
 {
  new Person{Name="张三",Gender="",Age=19},
  new Person{Name="李四",Gender="",Age=34},
  new Person{Name="春丽",Gender="",Age=20},
  new Person{Name="老王",Gender="",Age=37},
  new Person{Name="小红",Gender="",Age=18},
 };

//移除年龄大于25,且性别为男的person

//方法一:linq 扩展方法where()
//personList = personList.Where(p=>p.Gender=="男"&&p.Age>25).ToList();

#region 方法二:遍历集合找到所有要移除的元素,装到一个临时集合里,然后取两个集合的差集
List<Person> personList2 = new List<Person>();
foreach (Person p in personList)
{
  if (p.Gender == ""&&p.Age >25)
  {
    personList2.Add(p);//装到临时集合里
  }
}
//取两个集合的差集
personList = personList.Except(personList2).ToList();//因为是延迟查询,所有ToList()一下赋值给原集合,原集合即为筛选后的集合

//输出
foreach (Person p in personList)
{
  Console.WriteLine(p.Name+" "+p.Gender+" "+p.Age);
}
Console.ReadKey();
}

}
#endregion

 

public class Person
{
private string namr;

public string Name
{
get { return namr; }
set { namr = value; }
}

private string gender;

public string Gender
{
get { return gender; }
set { gender = value; }
}

private int age;

public int Age
{
get { return age; }
set { age = value; }
}

}

 

总结:推荐第一种写法:扩展方法(lambda表达式),代码简洁,一气呵成。

posted @ 2015-03-11 21:26  秋刀鱼No1  阅读(970)  评论(0编辑  收藏  举报