List执行except() 运算产生的数据类型怎么用?

imtheuser 2012-11-04 11:08:52
两个List<int>集合list1,list2,
执行 var result=list1.Except(list2);
能否从 result 变量中判断运算后list1的元素数量【.toList()后用.Count可以知道,但希望在toList()前就判断,根据需要再决定是否进行toList()】?求解
...全文
245 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
imtheuser 2012-11-05
  • 打赏
  • 举报
回复
我的最终目的不是为了获得集合Count,而是是希望list1.except(list2)后,结果存回list1中。 但是List的except()运算是生成一个新集合,考虑到把新集合存回list1会耗费时间,如果list1的元素没有改变,就可以免除这一步了。现在知道这样并不能提高性能。楼上有好的建议吗?
Hauk 2012-11-05
  • 打赏
  • 举报
回复
引用 2 楼 imtheuser 的回复:
引用 1 楼 haukwong 的回复:不.toList()也有count方法啊。Except方法返回的是一个IEnumerable<int>,可以直接.Count() 不行,只有Count()方法。所以才郁闷
你要得到集合数量,有Count()方法为什么还不行呢? to #3 : 方法语法是不会延迟执行的,只有查询表达式才会。
imtheuser 2012-11-05
  • 打赏
  • 举报
回复
经过测试,楼上是对的,先判断再toList()并没有节省时间。谢谢! 尝试各种方法,就是想求一个高效的集合算法。 10万个List<int>集合,做except()运算竟然耗时将近一分钟。
  • 打赏
  • 举报
回复
引用 楼主 imtheuser 的回复:
两个List<int>集合list1,list2, 执行 var result=list1.Except(list2); 能否从 result 变量中判断运算后list1的元素数量【.toList()后用.Count可以知道,但希望在toList()前就判断,根据需要再决定是否进行toList()】?求解
首先ToList(),才能高效地Count()。 当你执行Count(),也是枚举了所有对象。如果不ToList(),由于Linq的延迟加载特性,那么下一次可能会再一次重复执行查询,反而慢了一倍速度。如果先ToList(),不但不会让Count()变慢,更可以避免之后的集合操作重复执行查询。
imtheuser 2012-11-05
  • 打赏
  • 举报
回复
引用 8 楼 stonespace 的回复:
List的Except方法效率不高,建议用HashSet
HashSet作集合运算是快些,但建立集合时却没有List快。正在权衡用哪个
stonespace 2012-11-05
  • 打赏
  • 举报
回复
List的Except方法效率不高,建议用HashSet
Hauk 2012-11-05
  • 打赏
  • 举报
回复
我觉得没有比直接赋值给list1更简单的方式了,只是更改一个引用指向的问题,不会浪费之源的。也不会损失性能。
imtheuser 2012-11-04
  • 打赏
  • 举报
回复
引用 1 楼 haukwong 的回复:
不.toList()也有count方法啊。Except方法返回的是一个IEnumerable<int>,可以直接.Count()
不行,只有Count()方法。所以才郁闷
Hauk 2012-11-04
  • 打赏
  • 举报
回复
不.toList()也有count方法啊。Except方法返回的是一个IEnumerable<int>,可以直接.Count()

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧