Как отсортировать набор по алфавиту в Dart / Flutter?

#flutter #dart #set

#flutter #dart #установить

Вопрос:

Я знаю, что есть List<string> , но мне нужно использовать Set<string> . Есть ли способ отсортировать его по алфавиту?

 Set reasons = {
  'Peter',
  'John',
  'James',
  'Luke',
}
  

Комментарии:

1. Тип набора не указан. В документах упоминается, что набор неупорядочен . Так в чем смысл его сортировки? Я не понимаю.

Ответ №1:

Используйте SplayTreeSet вместо:

 import 'dart:collection';

...

final sortedSet = SplayTreeSet.from(
  {'Peter', 'John', 'James', 'Luke'},
  // Comparison function not necessary here, but shown for demonstrative purposes 
  (a, b) => a.compareTo(b), 
);
print(sortedSet);

// Prints: {James, John, Luke, Peter}
  

Как указывает Джеймсдлин, функция сравнения не требуется, если тип реализует Comparable .

Комментарии:

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

Ответ №2:

Вы можете преобразовать набор в список и вызвать метод сортировки. Затем вы можете снова преобразовать этот список в set . Вы также можете создать удобный метод расширения в Set, который делает то же самое.

 Set reasons = {
  'Peter',
  'John',
  'James',
  'Luke',
};
final reasonsList = reasons.toList();
reasonsList.sort();
print(reasonsList.toSet());