【发布时间】:2022-10-14 00:46:45
【问题描述】:
dart .sort() 方法不能用作迭代器链的一部分。
例如,我不能做下一个
arr.sort().take(5);
在 C# 中,它们具有 OrderBy() 和 OrderByDesc() 可用于按类字段排序,并可用作迭代器链的一部分。
【问题讨论】:
dart .sort() 方法不能用作迭代器链的一部分。
例如,我不能做下一个
arr.sort().take(5);
在 C# 中,它们具有 OrderBy() 和 OrderByDesc() 可用于按类字段排序,并可用作迭代器链的一部分。
【问题讨论】:
您可以编写一个简单的扩展函数:
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);
【讨论】:
import 'package:collection';
final sortedIterator = someIterable.sorted().take(5);
您应该同时研究 package:async 和 package:collection。核心 Dart 团队维护的许多奖励功能。
【讨论】: