【问题标题】:What Is This Dart Method Called?这种飞镖方法叫什么?
【发布时间】:2021-06-20 05:45:00
【问题描述】:

我认为这在 Dart 中一定是一种非常常见的方法。我在任何地方都找不到它,所以我创建了自己的。它将任意数量的Iterable<T>s 的内容相加。我叫它aggregate

extension IterableExtensions<T> on Iterable<Iterable<T>> {
  List<T> aggregate() {
    final list = <T>[];
    forEach((element) {
      element.forEach(list.add);
    });
    return list;
  }
}

此方法是否存在于另一个库中?如果是这样,调用的方法是什么,我要导入什么?

【问题讨论】:

    标签: list flutter dart


    【解决方案1】:

    您可以通过两种方式解决扁平化迭代的问题:

    要么

    1. 为集合API导入dart扩展包并使用flattenedhttps://pub.dev/documentation/collection/latest/collection/IterableIterableExtension.html
    import 'package:collection/collection.dart';
    
    // [...]
    
    iterable.flattened.toList();
    
    1. 在外部可迭代对象上使用expand(在其他语言中也称为flatMap)方法
    iterable.expand((nested) => nested).toList();
    

    https://pub.dev/packages/collection

    【讨论】:

    • 我不知道flattened 扩展方法。 (唉,如果您不是专门寻找扩展方法,在 dartdocs 中似乎很难找到它们。)很好的发现!
    【解决方案2】:

    我只称它为扁平化列表。一个更简单的方法是:

    List<T> flatten<T>(Iterable<Iterable<T>> iterables) =>
        [for (var iterable in iterables) ...iterable];
    

    package:collection 提供了 CombinedIterableViewCombinedListView 类,它们做同样的事情但很懒惰。它还提供了一个类似的 IterableZip 类,但以广度优先方式而不是深度优先方式迭代项目。

    package:quiver 还提供了concatzip 函数。

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多