首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Dart列表中,addAll()和followedBy()有什么区别?

在Dart列表中,addAll()和followedBy()有什么区别?
EN

Stack Overflow用户
提问于 2022-08-28 14:39:51
回答 2查看 42关注 0票数 2

我需要在Dart中连接两个列表,并看到至少有两种不同的方法可以这样做。一个是list1.addAll(list2),另一个是list1.followedBy(list2)。我想知道有什么区别?文档将后者称为“延迟连接”。这是否意味着在第一种情况下复制元素,而只在后一种情况中引用元素?还是还有别的什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-28 18:28:51

list1.addAll(list2)增长并变异list1以包含list2的元素。如果list2有m个元素,那么list1.addAll(list2)的内存消耗将通过增长O(m)来实现。

如果您有:

代码语言:javascript
运行
复制
list1                  list2
+---+---+---+---+      +---+---+
| o | o | o | o |      | o | o |
+-|-+-|-+-|-+-|-+      +-|-+-|-+
  |   |   |   |          |   |
  v   v   v   v          v   v
  A   B   C   D          E   F

然后list1.addAll(list2)将产生:

代码语言:javascript
运行
复制
list1                       list2
+---+---+---+---+---+---+   +---+---+
| o | o | o | o | o | o |   | o | o |
+-|-+-|-+-|-+-|-+-|-+-|-+   +-|-+-|-+
  |   |   |   |   |   |       |   |
  v   v   v   v    \   \______|__ |
  A   B   C   D     \   ______/  \|
                     \ /          |
                      |           v
                      v           F
                      E

请注意,更改list2后不会影响list1的内容。

list1.followedBy(list2)返回一个Iterable (而不是List)。当您遍历该Iterable时,您将在list1上迭代,然后在list2上迭代。list1.followedBy(list2)不改变list1,也不应该分配新的Listlist1.followedBy(list2)的内存消耗将增长O(1),因为没有增长或创建List

在这种情况下,变异list2之后将影响followedBy返回的Iterable

代码语言:javascript
运行
复制
void main() {
  var list1 = [1, 2, 3];
  var list2 = [4, 5, 6];
  
  var list1Copy = [...list1];
  list1Copy.addAll(list2);
  
  print(list1Copy); // Prints: [1, 2, 3, 4, 5, 6]
   
  var concatenated = list1.followedBy(list2);
  print(concatenated.toList()); // Prints: [1, 2, 3, 4, 5, 6]

  list2.add(7);
  print(list1Copy); // Prints: [1, 2, 3, 4, 5, 6]
  print(concatenated.toList()); // Prints: [1, 2, 3, 4, 5, 6, 7]
}
票数 1
EN

Stack Overflow用户

发布于 2022-08-28 15:06:06

延迟加载(在本例中是延迟连接)意味着某些资源在必要之前不进行评估。相反,急切加载(或急切连接)意味着对资源进行完全评估。

因此,延迟连接意味着已知的连接被执行,但是它的最终评估被推迟到需要的时候。此外,急切连接意味着整个级联过程是完全完成的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73519622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档