В API-документах API есть метод sort()
на List
, но я не понимаю, что ему нужно для параметра. Текущая потребность в очень простом альфа-сравнении.
Как я могу отсортировать список строк в Dart?
Ответ 1
Спасибо за вопрос! Вы можете отсортировать список строк следующим образом:
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
}
Вышеприведенный код печатает:
apples, bananas, oranges
Обратите внимание, что sort()
не возвращает значение. Он сортирует список без создания нового списка. Если вы хотите сортировать и печатать в одной строке, вы можете использовать каскады методов:
print(fruits..sort());
Для большего контроля вы можете определить свою собственную логику сравнения. Вот пример сортировки фруктов по цене.
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
print(fruits);
}
Посмотрите, что здесь происходит.
A List имеет метод sort, который имеет один необязательный параметр: a Comparator. Компаратор представляет собой typedef
или псевдоним функции. В этом случае это псевдоним для функции, которая выглядит следующим образом:
int Comparator(T a, T b)
Из документов:
Функция компаратора представляет такое полное упорядочение, возвращая отрицательное целое число, если a меньше b, ноль, если a равно b, и положительное целое число, если a больше b.
Ответ 2
Вот однострочный код для его достижения.
fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>
Ответ 3
Ленивая сортировка (позволяет сортировать пустые значения).
Результат IEnumerable.
Пользовательский компаратор может быть передан в качестве аргумента.
import 'package:queries/collections.dart';
void main() {
var strings = ["c", "bb", "b", "cc", null, "a", 'ccc'];
var data = new Collection<String>(strings);
var query = data.orderBy((s) => s).thenBy((s) => s.length);
print(query.asIterable());
print(query.toList());
}
Выход:
(null, a, b, bb, c, cc, ccc)
[null, a, b, bb, c, cc, ccc]
Другой способ при использовании Dart '>=2.6.0-dev.7.0
.
import 'package:enumerable/enumerable.dart';
void main(List<String> args) {
var strings = ["c", "bb", "b", "cc", null, "a", 'ccc'];
var query = strings.orderBy((s) => s).thenBy((s) => s.length);
print(query.toList());
}
Ответ 4
Чтобы добавить только один пункт к подробному ответу Сета, в общем, в
(a, b) => foo(a, b)
прошедшего в sort
, функция foo
должна ответить на целочисленный результат следующим образом:
- если a < b, результат должен быть < 0,
- если a = b, результат должен быть = 0, а
- если a > b, результат должен быть > 0.
Для того чтобы вышеприведенный закон трихотомии держать, как a
, так и b
должен быть Comparable
s.
Ответ 5
После сегодняшнего дня вы должны просто сделать list.sort(). Аргумент метода сортировки теперь является необязательным, и по умолчанию используется функция, которая вызывает compareTo для самих элементов. Поскольку String Comparable, он должен просто работать сейчас.