两个List<int>集合list1,list2,
执行 var result=list1.Except(list2);
能否从 result 变量中判断运算后list1的元素数量【.toList()后用.Count可以知道,但希望在toList()前就判断,根据需要再决定是否进行toList()】?求解

解决方案 »

  1.   

    不.toList()也有count方法啊。Except方法返回的是一个IEnumerable<int>,可以直接.Count()
      

  2.   


    不行,只有Count()方法。所以才郁闷
      

  3.   


    首先ToList(),才能高效地Count()。当你执行Count(),也是枚举了所有对象。如果不ToList(),由于Linq的延迟加载特性,那么下一次可能会再一次重复执行查询,反而慢了一倍速度。如果先ToList(),不但不会让Count()变慢,更可以避免之后的集合操作重复执行查询。
      

  4.   

    经过测试,楼上是对的,先判断再toList()并没有节省时间。谢谢!
    尝试各种方法,就是想求一个高效的集合算法。
    10万个List<int>集合,做except()运算竟然耗时将近一分钟。
      

  5.   

    你要得到集合数量,有Count()方法为什么还不行呢?to #3 :
    方法语法是不会延迟执行的,只有查询表达式才会。
      

  6.   

    我的最终目的不是为了获得集合Count,而是是希望list1.except(list2)后,结果存回list1中。
    但是List的except()运算是生成一个新集合,考虑到把新集合存回list1会耗费时间,如果list1的元素没有改变,就可以免除这一步了。现在知道这样并不能提高性能。楼上有好的建议吗?
      

  7.   

    我觉得没有比直接赋值给list1更简单的方式了,只是更改一个引用指向的问题,不会浪费之源的。也不会损失性能。
      

  8.   

    List的Except方法效率不高,建议用HashSet
      

  9.   


    HashSet作集合运算是快些,但建立集合时却没有List快。正在权衡用哪个