-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
We can add a class Comparison so we can individually determine ascending
extension ListExtensions<T> on List<T> {
void sortByX(List<Comparison<T>> comparisons) {
sort((a, b) {
int result = 0;
for (final sorter in comparisons) {
final byA = sorter.comparison(a);
final byB = sorter.comparison(b);
if (byA == null && byB != null) return sorter.ascending ? -1 : 1;
if (byB == null && byA != null) return sorter.ascending ? 1 : -1;
if (byA != null && byB != null) {
result = _compareValues(byA, byB, sorter.ascending);
if (result != 0) return result;
}
}
return result;
});
}
int _compareValues<A extends Comparable<dynamic>>(A a, A b, bool ascending) {
if (identical(a, b)) return 0;
if (ascending) return a.compareTo(b);
return -a.compareTo(b);
}
}
class Comparison<T> {
final Comparable<dynamic>? Function(T item) comparison;
final bool ascending;
Comparison(this.comparison, {this.ascending = true});
}Metadata
Metadata
Assignees
Labels
No labels