dart - List中的[]和elementAt有什么区别?
问题描述
var ints = [0, 1, 2, 3];
var foo = ints.elementAt(1);
var bar = ints[1];
assert(foo == bar);
elementAt
和操作员都[]
做同样的工作。两者之间有什么区别,如果没有,那么当我们可以使用它们时,为什么[]
在类中没有定义?Iterable
elementAt
解决方案
那么为什么我们可以在类上使用时没有
[]
定义呢?Iterable
elementAt
你已经回答了你自己的问题:不同之处在于它elementAt
是为所有Iterable
s 定义的,而operator []
不是。
在大多数语言中,[]
通常预计会很快:通常是 O(1) 或 O(log n)。允许[]
访问链表的元素在技术上是可行的,但这通常不是一个好主意,因为它会使潜在的性能问题变得不那么明显。大多数人不会期望someCollection[99]
执行 100 次迭代。
可以按迭代顺序遍历元素,忽略第一个
index
元素,然后返回下一个。一些可迭代对象可能有更有效的方法来查找元素。
所以任何人Iterable
总是可以提供一个elementAt
实现,这不一定很快,但只有可以提供有效实现的派生类才应该提供operator []
. 对于这样的类,elementAt
应该[]
是一样的。
推荐阅读
- python - 我无法使用 Selenium 在 PHP 网站上获取元素
- python - 重定向页面有其他pk
- docker - 集线器中不存在“youtrack”的服务
- android - Killing Fragment in Navigation Components without going previous fragment
- html - 页面图标/标题未通过代理的 cloudflare 站点显示
- xamarin.forms - 如何在不触发键盘的情况下重新定位 Xamarin.Forms 中的 Entry.CursorPosition?
- c++ - 编译器无法识别构造函数
- api - 如何从 StubHub API 获取图像和场地 URL
- java - 如何创建浮动面板以在 Android 中显示图像
- html - 使 main 占据主体的全部高度,除了标题 NextJS React