有没有办法在map/forEach中识别当前的索引?

11 浏览
0 Comments

有没有办法在map/forEach中识别当前的索引?

大多数编程语言都提供了类似这样的功能 apples.map((apple, index) => {})。那么在Dart中,如何在map或forEach中识别索引呢?

有人提供了 apples.asMap().map((apple, index) => {}),但这会返回一个不可修改的版本的map,当我尝试将列表映射为widget时,这是不合适的,因为需要在 Columnchildren: 中使用 .toList()

0
0 Comments

在使用map或forEach函数时,有时我们需要知道当前元素在集合中的索引位置。然而,map和forEach函数是定义在Iterable接口上的,而Iterable接口的元素不一定是有序的,所以为每个元素提供索引并不总是有意义的。例如,如果Iterable是一个Set集合,那么元素就没有顺序。

在上述问题中,我不太明白为什么你需要在你的例子中使用索引。如果你能扩展你的例子,或许我就能理解了。

在map函数中使用索引可能有许多其他用途,与元素在原始列表中的实际索引无关。例如:知道当前项之前有多少项,创建自增ID,知道当前项是否在偶数或奇数索引位置等等。

解决这个问题的方法是使用for循环来遍历集合,这样就可以获取到每个元素的索引。下面是一个示例代码:

List list = Arrays.asList("apple", "banana", "orange");
for (int i = 0; i < list.size(); i++) {
    String element = list.get(i);
    System.out.println("Index: " + i + ", Element: " + element);
}

在这个示例中,我们使用for循环来遍历一个List集合,并使用get(i)方法获取每个元素。这样就可以得到每个元素在集合中的索引。

希望这个解决方法能帮助到你!

0
0 Comments

问题的原因是想要在使用map或forEach迭代列表时,能够获取当前项的索引。解决方法是使用Dart中的新特性——collection for构造。具体代码如下所示:

Widget build(BuildContext context) {

final list = ['Mango', 'Orange', 'Apple'];

return Scaffold(

appBar: AppBar(

title: Text(widget.title),

),

body: Column(

children: [

for (int i = 0; i < list.length; i++)

ListTile(title: Text('${list[i]} has index $i')),

],

),

);

}

为了使这段代码能够正常运行,需要在`pubspec.yaml`中更新Dart SDK版本:

environment:

sdk: ">=2.3.0 <3.0.0"

另外,也可以通过在外部创建一个单独的for循环,并将所有的小部件添加到一个列表中作为子项来实现相同的效果,这样可能看起来更清晰。如果这个解决方案对您有帮助,请将其标记为正确答案。

0