Причина в том, что ваши числа представлены как String
объекты и, следовательно, отсортированы в алфавитном порядке, а не в порядке значений. Для этого нам нужно преобразовать каждый String
объект в int
объект, прежде чем мы сравним значения.
Предыдущее упомянутое решение работает, но вы получите Список объектов int
, так как он первый преобразует List<String>
в List<int>
перед сортировкой.
Если вы не хотите этого, вы можете сделать следующее, чтобы сохранить исходное представление чисел:
void main() {
final list = ['1', '5', '10', '25', '50', '100', '250'];
list.sort((a, b) => int.parse(a).compareTo(int.parse(b)));
print(list); // [1, 5, 10, 25, 50, 100, 250]
}
Если список очень длинный, было бы более эффективно использовать другое упомянутое решение и после сортировки преобразовать List<int>
обратно в List<String>
:
void main() {
List<String> list = ['1', '5', '10', '25', '50', '100', '250'];
List<int> lint = list.map(int.parse).toList();
lint.sort();
list = lint.map((i) => i.toString()).toList();
print(list); // [1, 5, 10, 25, 50, 100, 250]
}