我经常写这样的代码:
if ( list.Count > 0 ) { }
Run Code Online (Sandbox Code Playgroud)
这有效吗?此操作是否如下所示:
或者像这样:
也就是说,要获得列表中的元素数量,您是否必须在列表中一直计算,或者是在某处记录的元素数量?这是所有ICollection课程的情况吗?
怎么样的Capacity名单呢?
Eri*_*ert 33
我经常写这样的代码:
if ( list.Count > 0 ) { }这有效吗?
是.它检索列表中的计数,该计数存储在列表内的字段中,并将其与零进行比较.
现在你问的一个问题是:
怎么样
if ( sequence.Count() > 0 ) { }?(注意括号Count().)
我们在运行时查询序列以查看它是否是具有Count可以有效计算的属性的列表.如果是,我们称之为.如果没有,我们一次计算整个序列一个项目,然后将其与零进行比较.
这不是非常低效吗?
是.
什么会更有效率?
if (sequence.Any())
为什么效率更高?
因为它试图迭代一个元素.如果成功,那Any就是真的; 如果失败那么Any就是假的.你不需要计算罐子里的软糖数量,以便知道是否有超过零.您只需要查看是否至少有一个.
除了效率更高之外,代码现在看起来像代码的预期含义.如果您打算询问"列表中是否有任何项目?" 然后问"列表中有没有项目?" 而不是"列表中的项目数是否大于零?"
Capacity列表的属性怎么样?
这告诉您在列表的内部数据结构中预先分配了多少空间.它是必须分配更多内存之前列表可以存储的项目数量.
中的Count属性List<T>- 以及ICollection<T>BCL中的所有其他实现 - 是O(1)操作,这意味着它快速且独立于列表中元素的数量.
还存在Count()可以在任何上调用的扩展方法IEnumerable<T>.此方法为O(n),这意味着它的运行时间取决于可枚举中的元素数.但是,有一个例外:如果可枚举实际上是一个实现,ICollection<T>或者ICollection它使用该Count属性再次使其成为O(1)操作.
该Capacity物业通常无需担心.
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |