var ints = [0, 1, 2, 3];
var foo = ints.elementAt(1);
var bar = ints[1];
assert(foo == bar);
Run Code Online (Sandbox Code Playgroud)
elementAt和操作员都[]做同样的工作。两者之间有什么区别吗?如果没有,那么为什么我们可以使用它们时却没有[]在类中定义?IterableelementAt
在大多数语言中,[]通常期望速度快:访问随机元素通常为 O(1)(有时为 O(log n))。允许[]访问链表的元素在技术上是可行的,但这通常是一个坏主意,因为它会使潜在的性能问题不那么明显。大多数人不会期望someCollection[99]执行 100 次迭代。
可以按迭代顺序迭代元素,忽略第一个
index元素,然后返回下一个元素。某些可迭代对象可能有更有效的方式来查找元素。
所以任何Iterablealways都可以提供elementAt实现,这不一定很快,但只有能够提供高效实现的派生类才应该提供operator []。对于这样的类,elementAt和[] 应该是相同的。