集合的筛选

经常在项目中遇到要删除集合中某些元素,而用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表达式),代码简洁,一气呵成。

时间: 2024-11-07 23:28:54

集合的筛选的相关文章

列表/字典/集合数据筛选

import randomlist1 = [random.randint(-10,10) for _ in range(10)]print('随机生成的十个在-10到10之间的整数列表:',list1)outList1 = list(filter(lambda x: x>=0,list1))#filter返回一个可迭代对象outList2 = [x for x in list1 if x >=0]#列表解析,快于filterprint('filter过滤列表中大于0的数:',outList1)

List 多条件,多条件筛选集合

public List<DeviceStatePojoVo> getState(int deviceType, String precinctId, String deviceName, String onLine) { List<CfgDevice> deviceList = cfgDeviceMapper.findAllDevice();//查所有 StringBuffer s = new StringBuffer(); Map<String, CfgDevice>

python基础 filter ,列表,字典,集合 中根据 条件 筛选 数据

from random import randint data = [randint(-10, 10) for _ in xrange(10)] print data e = filter(lambda x: x >= 0, data) print e 或者使用  列表解析       速度快 [x for x in data if x >= 0] 对字典的筛选 d = {x: randint(60, 100) for x in xrange(1, 21)} print d print {k:

十四、C# 支持标准查询运算符的集合接口

支持标准查询运算符的集合接口. System.Linq.Enumeralbe类提供的一些常用的API 来执行集合处理 1.匿名类型 2.隐匿类型的局部变量 3.集合初始化器 4.集合 5.标准查询运算符 本章主要讨论泛型集合接口. 非泛型的集合类,待查. 一.匿名类型和隐式类型的局部变量声明 C#3.0增强. 1.匿名类型 一种特殊的数据类型,它最终是由编译器声明的,而非通过已定义好的类来声明的. 和匿名函数相似,当编译器看到一个匿名类型时,会自动执行一些后台操作,生成必要的代码, 允许像显式声

python进阶学习chapter02(列表、字典、集合操作)

如何在列表.字典.集合中筛选数据 列表(元组)的重命名 词频统计的实现 字典的排序 寻找多个字典的公共键 如何让字典保持有序 如何保持历史纪录(使用deque队列) 一.如何在列表.字典.集合中筛选数据 问题引入: 列表:[-10,2,2,3,-2,7,6,9] 找出所有的非负数 字典:{1:90,2:55,3:87...} 找出所有值大于60的键值对 集合:{2,3,8,6,7,5} 找出所有被3整除的数 列表: #方法一,迭代 data=[1,5,-4,-6,0,7,9] res=[] fo

Java之ArrayList类(集合)

集合的由来 我们想存储多个数据,选择的容器可以是数组.而数组的长度是固定的,无法适应数据变化的需求.为了解决这个问题,Java提供了另一个容器 java.util.ArrayList 集合类,让我们可以更便捷的存储和操作对象数据.数组的长度不可以发生改变.但是ArrayList集合的长度是可以随意变化的. ArrayList类概述 java.util.ArrayList 是大小可变的数组的实现,存储在内的数据称为元素.此类提供一些方法来操作内部存储的元素. ArrayList 中可不断添加元素,

.NET深入解析LINQ框架(二:LINQ优雅的前奏)

阅读目录: 1.LINQ框架的主要设计模型 1.1.链式设计模式 (以流水线般的链接方式设计系统逻辑) 1.2.链式查询方法(逐步加工查询表达式中的每一个工作点) 2.LINQ框架的核心设计原理 2.1.托管语言之上的语言(LINQ查询表达式) 2.2.托管语言构造的基础(LINQ依附通用接口与查询操作符对应的方法对接) 2.3.深入IEnumerable.IEnumerable<T>.Enumerable(LINQ to Object框架的入口) 2.4.深入IQueryable.IQuer

jQuery父级以及同级元素查找的实例

父级以及同级元素的查找在使用过程中还是蛮频繁的,下面为大家介绍下jQuery是如何实现的,感兴趣的朋友可以参考下 jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(expr),但是是查找所有祖先元素,不限于父元素 jQuery.children(

深入理解 hash 函数、HashMap、LinkedHashMap、TreeMap 【中】

LinkedHashMap - 有序的 HashMap 我们之前讲过的 HashMap 的性能表现非常不错,因此使用的非常广泛.但是它有一个非常大的缺点,就是它内部的元素都是无序的.如果在遍历 map 的时候, 我们希望元素能够保持它被put进去时候的顺序,或者是元素被访问的先后顺序,就不得不使用 LinkedHashMap. LinkdHashMap 继承了 HashMap,因此,它具备了 HashMap 的优良特性-高性能.在HashMap 的基础上, LinkedHashMap 又在内部维