Dart:映射列表(list.map)

Posted

技术标签:

【中文标题】Dart:映射列表(list.map)【英文标题】:Dart: mapping a list (list.map) 【发布时间】:2018-10-01 03:42:29 【问题描述】:

我有一个Strings 的列表,例如,

var moviesTitles = ['Inception', 'Heat', 'Spider Man'];

并且想在 Flutter 中使用 moviesTitles.map 将它们转换为 Tab Widgets 的列表。

【问题讨论】:

【参考方案1】:

你可以使用

moviesTitles.map((title) => Tab(text: title)).toList()

示例:

    bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) => Tab(text: title)).toList()
      ,
    ),

【讨论】:

我们为什么需要toList @onmyway133 因为问题是关于映射列表 @AbdulMomenعبدالمؤمن 我相信问题是为什么首先需要它。在 Swift 中,映射 Array 会返回新结果类型的 Array。为什么映射 Dart List 的结果还不是列表? @MichaelLong 因为在这里,在 Dart 中,map<T> 返回 Iterable<T> 而不是 List<T> map() 返回的Iterable 是懒惰的。它还没有被评估,只有当有人实际迭代它时。调用toList(),除了返回一个实际的列表外,还会强制执行此评估。【参考方案2】:

我尝试了同样的方法,但是在函数映射中使用了一个不同的列表,其中包含更多的值。我的问题是忘记了退货声明。这很重要:)

 bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) return Tab(text: title)).toList()
      ,
    ),

【讨论】:

这是因为你的函数是用声明的,问题是一行函数 只需将其更改为 map((title) => Tab(text: title)).toList() ,因此无需返回... 是的,这是第一个(投票最多的)评论。我在返回 @Nima 之前为代码添加了这条注释【参考方案3】:

是的,你也可以这样做

 List<String> listTab = new List();
 map.forEach((key, val) 
  listTab.add(val);
 );

 //your widget//
 bottom: new TabBar(
  controller: _controller,
  isScrollable: true,
  tabs: listTab
  ,
),

【讨论】:

【参考方案4】:

我是新来的颤振。我发现这样也可以实现。

 tabs: [
    for (var title in movieTitles) Tab(text: title)
  ]

注意:需要 dart sdk 版本 >= 2.3.0, see here

【讨论】:

【参考方案5】:
tabs: [...data.map((title)  return Text(title);).toList(), extra_widget],

tabs: data.map((title)  return Text(title);).toList(),

对我来说很好用

【讨论】:

以上是关于Dart:映射列表(list.map)的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter/Dart 中映射多个列表?

在 Dart 中枚举或映射具有索引和值的列表

如何在Scala中用列表值转置地图

Scala - 将地图列表转换为地图

如何在 Dart 中仅使用级联或链式调用干净地映射/排序/折叠/排序/扩展?

Pythonfiltermapreduce