Dart 标准库中是否有一个函数可以让我检查列表是否排序?
当然,我可以轻松地实现我的(以不同的方式(,但由于这可能是经常需要的操作,因此将这样的函数作为List
API 的一部分或作为其他库中的顶级函数或算法可能很有用。
使用collection
包(包含在 Flutter 中(,您可以使用isSorted
函数。
检查整数列表是否排序的示例:
import 'package:collection/collection.dart';
final list = [1, 2, 3];
list.isSorted((a, b) => a.compareTo(b)); // true
没有直接检查排序的方法,而且它不容易从Iterable.fold
或Iterable.reduce
构建。 这不是以前请求过的功能,因此不太可能放入平台库中。 可能值得将其放在像package:collection
或package:quiver
这样的包中。
以下是您可以使用的函数:
bool isSorted<T>(List<T> list, [int Function(T, T)? compare]) {
if (list.length < 2) return true;
compare ??= (T a, T b) => (a as Comparable<T>).compareTo(b);
T prev = list.first;
for (var i = 1; i < list.length; i++) {
T next = list[i];
if (compare(prev, next) > 0) return false;
prev = next;
}
return true;
}