gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:54:53 27 4
gpt4 key购买 nike

var ints = [0, 1, 2, 3];
var foo = ints.elementAt(1);
var bar = ints[1];
assert(foo == bar);
两者 elementAt[]运算符(operator)做同样的工作。两者有什么区别,如果没有,那为什么没有 []定义于 Iterable我们可以使用的类 elementAt在他们?

最佳答案

then why there is no [] defined in Iterable class when we can use elementAt on them?


您已经回答了自己的问题:不同之处在于 elementAt为所有 Iterable 定义s 和 operator []不是。
在大多数语言中, []通常预计会很快:通常是 O(1) 或 O(log n)。允许 []访问链表的元素在技术上是可能的,但这通常是一个坏主意,因为它会使潜在的性能问题不那么明显。大多数人不会想到 someCollection[99]执行 100 次迭代。
相比之下, elementAt does not make any such guarantee :

May iterate through the elements in iteration order, ignoring the first index elements and then returning the next. Some iterables may have a more efficient way to find the element.


所以任何 Iterable总能提供 elementAt实现,不一定快,但是只有派生类可以提供高效的实现才应该提供 operator [] .对于此类, elementAt[]应该是一样的。

关于dart - List 中的 [] 和 elementAt 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63532001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com