Dictionary 有没有办法在map/forEach中标识当前索引
大多数语言都提供类似以下内容的Dictionary 有没有办法在map/forEach中标识当前索引,dictionary,flutter,dart,Dictionary,Flutter,Dart,大多数语言都提供类似以下内容的apples.map((apple,index)=>{})。Dart在地图或forEach中标识索引的等价物是什么 有人提供了apples.asMap().map((apple,index)=>{})但是它返回了一个不可修改的映射版本,当我试图映射一个列表以生成小部件.toList()时,它不适用于列的子项:我不确定我是否完全理解您的意图,但是map和forEach是在Iterable上定义的,并且一个Interable的元素不一定是有序的,因此为每个元素提供索引不
apples.map((apple,index)=>{})
。Dart在地图或forEach中标识索引的等价物是什么
有人提供了
apples.asMap().map((apple,index)=>{})
但是它返回了一个不可修改的映射版本,当我试图映射一个列表以生成小部件.toList()
时,它不适用于列的子项:
我不确定我是否完全理解您的意图,但是map
和forEach
是在Iterable上定义的,并且一个Interable的元素不一定是有序的,因此为每个元素提供索引不一定有意义。例如,如果Iterable是一个集合,则元素没有顺序
我不太明白为什么在您的特定示例中需要索引。如果你扩展你的例子,也许我会理解 使用列表项的索引和值的一种方法是使用新的构造。代码如下所示:
Widget build(BuildContext context) {
final list = ['Mango', 'Orange', 'Apple'];
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Column(
children: <Widget>[
for (int i = 0; i < list.length; i++)
ListTile(title: Text('${list[i]} has index $i')),
],
),
);
}
在地图中拥有一个索引
可能非常有用,原因很多,与原始列表中项目的实际索引无关。例如:知道当前项目之前已经看到了多少个项目,创建自动递增ID,知道当前项目是处于偶数索引还是奇数索引,等等。。asMap
是正确的方法。Map、filter、reduce等功能类似于工具。它们不会修改原始结构,这是经过设计的。相反,它们返回原始结构的副本。如果您需要修改元素,只需保留asMap
的返回值。谢谢,我会尝试一下,我最终只是在外部创建了一个单独的for循环,并将所有小部件添加到一个列表中作为子级使用。这可能看起来更干净。干杯这些新的构造是Dart的UI作为代码哲学的一部分,并且是一个很好的推荐。如果我的答案符合你的目的,你能把它标为正确答案吗?
environment:
sdk: ">=2.3.0 <3.0.0"