如何在Dart中使用flatMap列表?

bar*_*nus 15 dart

我可以在Dart中映射列表:

[1,2,3].map((e) => e + 1)
Run Code Online (Sandbox Code Playgroud)

但是我该如何flatMap这个列表呢?下面的代码不起作用.

[1,2,3].flatMap((e) => [e, e+1])
Run Code Online (Sandbox Code Playgroud)

bar*_*nus 24

expand 方法相当于Dart中的flatMap.

[1,2,3].expand((e) => [e, e+1])
Run Code Online (Sandbox Code Playgroud)

更有趣的是,返回Iterable是懒惰的,并且每次迭代时都会调用每个元素的函数.


Sur*_*gch 15

来自 Swift,flatMap似乎与所需的 OP 含义略有不同。这是一个补充答案。

给定以下二维列表:

final list = [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]];
Run Code Online (Sandbox Code Playgroud)

您可以将其转换为一维可迭代对象,如下所示:

final flattened = list.expand((element) => element);
// (1, 2, 2, 3, 3, 3, 4, 4, 4, 4)
Run Code Online (Sandbox Code Playgroud)

或者通过附加到列表toList

final flattened = list.expand((element) => element).toList();
// [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
Run Code Online (Sandbox Code Playgroud)