【问题标题】:Dart orderBy sorting for iteratorsDart orderBy 对迭代器的排序
【发布时间】:2022-10-14 00:46:45
【问题描述】:

dart .sort() 方法不能用作迭代器链的一部分。

例如,我不能做下一个

arr.sort().take(5);

在 C# 中,它们具有 OrderBy() 和 OrderByDesc() 可用于按类字段排序,并可用作迭代器链的一部分。

【问题讨论】:

    标签: flutter dart sorting


    【解决方案1】:

    您可以编写一个简单的扩展函数:

    typedef CompareBy<T, TOrder> = TOrder Function(T item);
    
    extension IteratorUtilities<T> on Iterable<T> {
      List<T> orderBy<TOrder extends Comparable<TOrder>>(CompareBy<T, TOrder> fn) {
        var list = toList();
        list.sort((a, b) => fn(a).compareTo(fn(b)));
    
        return list;
      }
    
      List<T> orderByDesc<TOrder extends Comparable<TOrder>>(CompareBy<T, TOrder> fn) {
        var list = toList();
        list.sort((a, b) => fn(b).compareTo(fn(a)));
    
        return list;
      }
    }
    

    使用示例

    简单排序:

    ["x", "ab", "c"].orderBy((c) => c).take(2);
    

    按用户名排序:

    users.orderBy((u) => u.name).take(2);
    

    【讨论】:

    • 或者只是导入 package:collection 并使用 Iterable.sorted。 :)
    【解决方案2】:
    import 'package:collection';
    
    final sortedIterator = someIterable.sorted().take(5);
    

    您应该同时研究 package:async 和 package:collection。核心 Dart 团队维护的许多奖励功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      相关资源
      最近更新 更多