Как я могу отсортировать список с помощью дартс? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть такой список list = ['1','5','10','25','50','100','250'];

Я сортирую такой список list..sort((a, b) => a.compareTo(b);

Но возвращаю

1 - 10 - 100 - 25 - 250 - 5 - 50

Как я могу отсортировать подобное возвращение

1 - 5 - 10 - 25 - 50 - 100 - 250

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Сначала нужно преобразовать список строк в список int, а затем отсортировать их.

List<String> list = ['1', '5', '10', '25', '50', '100', '250'];
List<int> lint = list.map(int.parse).toList();
lint.sort();
print(lint);
1 голос
/ 30 апреля 2020

Причина в том, что ваши числа представлены как 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]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...