如何在Dart中对List执行flatMap操作?
在Dart中实现List的flatMap操作
嘿,我懂你的困惑!Dart的List确实没有直接提供flatMap方法,但别担心,我们有完美的替代方案——expand方法,它的作用和flatMap完全一致。
你原来尝试的代码:
[1,2,3].flatMap((e) => [e, e+1])
只需要把flatMap换成expand,再转成List(因为expand返回的是Iterable)就可以正常运行了:
final result = [1,2,3].expand((e) => [e, e+1]).toList(); // 运行后得到结果:[1, 2, 2, 3, 3, 4]
为什么expand能替代flatMap?
expand方法会遍历原List的每个元素,将每个元素通过你传入的函数转换成一个新的Iterable,然后自动把所有这些小Iterable里的元素拼接成一个大的Iterable,这正是flatMap“映射后扁平化”的核心逻辑。
如果你偏爱flatMap这个名字
也可以通过扩展方法给Iterable(List属于Iterable)添加一个flatMap方法,这样就能按你习惯的方式调用了:
extension FlatMapExtension<T> on Iterable<T> { Iterable<R> flatMap<R>(Iterable<R> Function(T element) mapper) => expand(mapper); } // 之后就能这样用: final result = [1,2,3].flatMap((e) => [e, e+1]).toList();
内容的提问来源于stack exchange,提问作者bartektartanus
相关产品推荐
相关产品推荐

