首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Dart中枚举或映射具有索引和值的列表

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

Stack Overflow用户
提问于 2019-02-27 05:42:05
回答 14查看 171.9K关注 0票数 189

在飞镖里,任何等同于普通的东西:

代码语言:javascript
运行
复制
enumerate(List) -> Iterator((index, value) => f)
or 
List.enumerate()  -> Iterator((index, value) => f)
or 
List.map() -> Iterator((index, value) => f)

这似乎是最简单的方法,但似乎仍然奇怪的是,这种功能将不存在。

代码语言:javascript
运行
复制
Iterable<int>.generate(list.length).forEach( (index) => {
  newList.add(list[index], index)
});
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2019-02-27 06:57:17

有一个asMap方法,它将列表转换为映射,其中键是索引,值是索引的元素。请看一下docs 这里

示例:

代码语言:javascript
运行
复制
List _sample = ['a','b','c'];
_sample.asMap().forEach((index, value) => f);

希望这能有所帮助!

票数 278
EN

Stack Overflow用户

发布于 2019-12-22 20:34:45

您可以从mapIndexed包中使用collectionforEachIndexed扩展方法。请注意,与javascript的array.map()或C#的IEnumerable.Select()不同,索引是回调的第一个参数,而不是第二个参数:

代码语言:javascript
运行
复制
import 'package:collection/collection.dart';

void main() {
  final inputs = ['a', 'b', 'c', 'd', 'e', 'f'];
  final indexes = inputs.mapIndexed((index, element) => index).toList();
  
  inputs.forEachIndexed((index, element) {
    print('index: $index, element: $element');
  });

  print(indexes);
}

现场演示

旧答案

从Dart 2.7开始,您可以使用方法扩展Iterable的功能,而不必编写助手函数:

代码语言:javascript
运行
复制
extension ExtendedIterable<E> on Iterable<E> {
  /// Like Iterable<T>.map but the callback has index as second argument
  Iterable<T> mapIndexed<T>(T Function(E e, int i) f) {
    var i = 0;
    return map((e) => f(e, i++));
  }

  void forEachIndexed(void Function(E e, int i) f) {
    var i = 0;
    forEach((e) => f(e, i++));
  }
}

用法:

代码语言:javascript
运行
复制
final inputs = ['a', 'b', 'c', 'd', 'e', 'f'];
final results = inputs
  .mapIndexed((e, i) => 'item: $e, index: $i')
  .toList()
  .join('\n');

print(results);

// item: a, index: 0
// item: b, index: 1
// item: c, index: 2
// item: d, index: 3
// item: e, index: 4
// item: f, index: 5
代码语言:javascript
运行
复制
inputs.forEachIndexed((e, i) => print('item: $e, index: $i'));

// item: a, index: 0
// item: b, index: 1
// item: c, index: 2
// item: d, index: 3
// item: e, index: 4
// item: f, index: 5

现场演示

票数 156
EN

Stack Overflow用户

发布于 2019-08-06 08:19:40

没有内置函数来获得迭代索引。

如果像我一样,您不喜欢只为一个简单的索引构建一个Map (数据结构)的想法,那么您可能需要的是一个map (函数),它为您提供索引。让我们把它称为mapIndexed (就像Kotlin中的那样):

代码语言:javascript
运行
复制
children: mapIndexed(
  list,
  (index, item) => Text("event_$index")
).toList();

mapIndexed的实现很简单:

代码语言:javascript
运行
复制
Iterable<E> mapIndexed<E, T>(
    Iterable<T> items, E Function(int index, T item) f) sync* {
  var index = 0;

  for (final item in items) {
    yield f(index, item);
    index = index + 1;
  }
}
票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54898767

复制
相关文章

相似问题

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