【问题标题】:Is there any difference when using map or for loop inside a list in Dart?在 Dart 的列表中使用 map 或 for 循环有什么区别吗?
【发布时间】:2021-11-14 13:20:33
【问题描述】:

我无法找到答案。希望你们中的任何人都可以解释除了其中一个看起来更漂亮之外是否有任何区别。

假设我有一个字符串列表(只是一个例子,任何列表用例都适合)

final strings = ['string 1', 'string 2', 'string 3'];

我想在一些 Text 小部件中呈现这些字符串。

用for循环来做,像这样:

Column(
  children: [
    for(final string in strings)
      Text(string),
  ],
);

或者用地图做,像这样:

Column(
    children: strings.map((String string) => Text(string)).toList()
);

在性能或其他方面有什么不同吗?

【问题讨论】:

  • 简短的回答是肯定的。从技术上讲 map 有点慢,但实际上你的应用程序不可能扩展到一个明显的点。在你达到那个点之前,Flutter 会窒息很久。我总是更喜欢map,因为它保留了功能组合并且更易于阅读 imo

标签: flutter dictionary for-loop dart iterator


【解决方案1】:

在这种特定情况下,它不会改变最终结果。

但是列表中的一些函数,map 包括返回一个惰性迭代器。这意味着在toList() 之前发生的任何计算都只会在必要的项目上进行。

换句话说,如果您有一个包含 100 个元素的列表并调用 myList.map(mappingFn).take(5).toList(),则映射函数只会被调用 5 次。

例如:

void main() {
  // mappingFn will be called 2 times
  [1,2,3,4,5].map(mappingFn).take(2).toList();
}

String mappingFn(int n) {
  print('called $n');
  return n.toString();
}

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多