dart List中的[]和elementAt有什么区别?

bzzcjhmw  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(118)
var ints = [0, 1, 2, 3];
var foo = ints.elementAt(1);
var bar = ints[1];
assert(foo == bar);

elementAt[]操作符都做同样的工作。两者之间有什么区别吗?如果没有,那么为什么在Iterable类中没有定义[],而我们可以在它们上面使用elementAt

bvhaajcl

bvhaajcl1#

在大多数语言中,[]通常被期望为 * 快速 *:允许[]访问一个链表的元素在技术上是可行的,但这通常是一个坏主意,因为它会使潜在的性能问题不那么明显。大多数人不会期望someCollection[99]执行100次迭代。
相反,elementAt does not make any such guarantee
可以按迭代顺序遍历元素,忽略第一个index元素,然后返回下一个。某些可迭代对象可能有更有效的方法来查找元素。
所以任何Iterable总是可以提供elementAt实现,这不一定很快,但是只有能够提供高效实现的派生类才应该提供operator []。对于这样的类,elementAt[] * 应该 * 是相同的。

相关问题