В этом руководстве мы покажем вам несколько способов и функций для сортировки списка объектов по убыванию в Dart/Flutter.
Это похоже на сортировку по возрастанию, но вы можете сделать это тремя способами:
- используя пользовательскую функцию сравнения.
- Расширение абстрактного класса
Comparable
, переопределение методаcompareTo()
и использованиеreversed
. - Расширение абстрактного класса
Comparable
, переопределение методаcompareTo()
и использование библиотеки fast_immutable_collections.
Полный текст сообщения: Dart/Flutter Sort Список объектов
Dart/Flutter Сортировка списка объектов по убыванию с использованием пользовательской функции сравнения
Передайте пользовательскую функцию сравнения в метод sort()
списка, поменяв местами элементы.
class Customer {
String name;
int age;
Customer(this.name, this.age);
@override
String toString() {
return '{ ${this.name}, ${this.age} }';
}
}
main() {
List<Customer> customers = [];
customers.add(Customer('Jack', 23));
customers.add(Customer('Adam', 27));
customers.add(Customer('Katherin', 25));
customers.sort((a, b) => b.age.compareTo(a.age));
print('Sort by Age: ' + customers.toString());
customers.sort((a, b) => b.name.compareTo(a.name));
print('Sort by Name: ' + customers.toString());
}
Выход:
Sort by Age: [{ Adam, 27 }, { Katherin, 25 }, { Jack, 23 }]
Sort by Name: [{ Katherin, 25 }, { Jack, 23 }, { Adam, 27 }]
Dart/Flutter Сортировка списка объектов по убыванию с использованием абстрактного класса Comparable
Мы можем отсортировать список объектов в порядке убывания, используя свойство reversed. Оно возвращает Iterable
объектов в списке.
class Customer extends Comparable {
String name;
int age;
Customer(this.name, this.age);
@override
String toString() {
return '{ ${this.name}, ${this.age} }';
}
// sort by Name (asc)
@override
int compareTo(other) {
return this.name.compareTo(other.name);
}
}
main() {
List<Customer> customers = [];
customers.add(Customer('Jack', 23));
customers.add(Customer('Adam', 27));
customers.add(Customer('Katherin', 25));
customers.reversed.toList();
print(customers);
}
Выход:
[{ Katherin, 25 }, { Jack, 23 }, { Adam, 27 }]
Сначала мы расширяем абстрактный класс Comparable
и переопределяем метод compareTo()
, затем вызываем list.reversed.toList()
.
.reversed
НЕ инвертирует список. Вместо этого он сортирует исходный список в порядке возрастания, а затем возвращает нисходящий Iterable
. Поэтому нам нужен .toList()
, наконец.
Однако как быть с большими списками?
Давайте рассмотрим другой подход.
Dart/Flutter Сортировка списка объектов по убыванию с помощью библиотеки
Мы можем создать свои неизменяемые коллекции и использовать библиотеку Fast Immutable Collections напрямую.
Класс такой же, как и в предыдущем подходе (расширяет Comparable
и переопределяет метод compareTo()
). Но он использует sortReversed()
, что гораздо быстрее.
import 'package:fast_immutable_collections/fast_immutable_collections.dart';
class Customer extends Comparable {
...
@override
int compareTo(other) {
return this.name.compareTo(other.name);
}
}
main() {
List<Customer> customers = [];
customers.add(Customer('Jack', 23));
customers.add(Customer('Adam', 27));
customers.add(Customer('Katherin', 25));
customers.sortReversed();
print(customers);
}
Выход:
[{ Katherin, 25 }, { Jack, 23 }, { Adam, 27 }]
Дальнейшее чтение
- Учебник по Dart/Flutter List с примерами
- Dart/Flutter Конструкторы — учебник с примерами
- Dart/Flutter String Methods & Operators учебник с примерами
- Dart/Flutter Future Учебник с примерами
-
Dart/Flutter Map Учебник с примерами
-
Dart/Flutter — Преобразование объекта в строку JSON
-
Dart/Flutter — Преобразование/разбор строки JSON, массива в объект, список
-
Dart/Flutter — Преобразование списка в карту & карты в список