Как я могу отсортировать список строк в дартс?

Я вижу, в API документации естьsort() метод наList, но мне непонятно, что нужно для параметра. Текущая потребность в очень простом прямом альфа-сравнении.

Ответы на вопрос(5)

Вот однострочный код для достижения этой цели.

fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>

зом:

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);
}

Посмотрим, что здесь происходит.

Список имеетСортировать метод, который имеет одинпо желанию параметр:компаратор, Компаратор этоtypedef или псевдоним функции. В данном случае это псевдоним для функции, которая выглядит следующим образом:

int Comparator(T a, T b)

Из документов:

Функция Comparator представляет такой общий порядок, возвращая отрицательное целое число, если a меньше, чем b, ноль, если a равно b, и положительное целое число, если a больше b.

 Seth Ladd03 окт. 2013 г., 09:42
Я обновил ответ на основе нового API. Гораздо проще сейчас :)
 Seth Ladd16 окт. 2012 г., 05:30
Спасибо @muntiful, рад слышать, что это будет исправлено в ближайшее время. См ошибкаcode.google.com/p/dart/issues/detail?id=1235
 george koller15 окт. 2012 г., 22:23
Спасибо! Извините, что жалуюсь, но, хотя я пытаюсь оценить очевидную универсальность вышеизложенного, я не нахожу его интуитивным или соответствующим предыдущему языковому опыту. Ребята, у вас есть кто-нибудь с квадратной деревянной мышью и длинной седой бородой, который придумывает что-нибудь из этого? :)
 munificent16 окт. 2012 г., 01:20
Это странный исторический артефакт. Компаратор должен быть необязательным. Раньше было, но мы изменили синтаксис необязательных параметров некоторое время назад, что заставило нас временно сделать все параметры необязательными, включая этот. Мы просто еще не получили возможности исправить это и сделать это снова необязательным.


Результат 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]

в общем, в

(a, b) => foo(a, b)

перешел вsort, функцияfoo должен ответить на целочисленный результат следующим образом:

если a <b, результат должен быть <0,если a = b, результат должен быть = 0, иесли a> b, результат должен быть> 0.

Для соблюдения вышеуказанного закона трихотомии обаa а такжеb должно бытьComparables.

.sort (). Аргумент метода sort теперь является необязательным, и по умолчанию используется функция, которая вызывает compareTo для самих элементов. Поскольку String является сопоставимым, он должен просто работать сейчас.

 devdanke02 дек. 2012 г., 00:25
К сожалению! Дарт сортировал массив :-) Но функция sort () возвращает void :-( Так что "print ([3,1,2] .sort ())" "выводит" null ". В этом случае разработчики Dart не реализуя свободный стиль программирования. Я хотел бы, чтобы они это сделали. Потому что тогда вы могли бы сразу использовать результат вызова sort ().
 devdanke01 дек. 2012 г., 22:48
Был ли метод List () когда-либо исправлен, чтобы не требовать функции компаратора? Или был регресс? Я использую Dart 0.2.6.0_r15355 в Ubuntu 12.04 и получаю следующие результаты: [3,1,2] .sort () == null и ['a', 'c', 'b']. Sort () == NULL.

Ваш ответ на вопрос