Как отсортировать список, который может содержать нулевые значения, с нулевой безопасностью dart

У меня есть список строк, которые могут содержать нулевые значения, как мне отсортировать этот список?

Я использую бета-канал Flutter, поэтому проверена нулевая безопасность . Вот что у меня есть на данный момент:

      List<String?> _list = [
  
 'beta',
 'fotxtrot',
 'alpha',
  null,
  null, 
 'delta',
];

_list.sort((a, b) => a!.compareTo(b!)); 

Как я могу получить это в качестве результата:

      _list = [
  null,
  null,
  'alpha',
  'beta',
  'delta',
  'fotxtrot',
];

4 ответа

Я столкнулся с этим недавно и построил однострочную функцию на основе документации compareTo :

      myList.sort((a, b) => a==null ? 1: b==null? -1 : a.compareTo(b));

NB: в конце списка появляется нулевое значение. В вашем случае просто поменяйте местами -1 и 1, чтобы они были в начале вашего списка.

Вам необходимо изменить метод сортировки, чтобы обрабатывать значения, допускающие значение NULL, а не просто игнорировать их. После обработки потенциальных нулей вы можете нормально их сравнить.

      _list.sort((a, b) {
  if(a == null) {
    return -1;
  }
  if(b == null) {
    return 1;
  }
  return a.compareTo(b);
}); 

Вы также можете использовать whereType:

      List<String?> _list = [
  'c',
  'a',
  'd',
  null,
  null,
  'b',
];

void main() {
  var list = _list.whereType<String>().toList();
  list.sort();
  print(list); // [a, b, c, d]
}

Я думаю, вам нужно сначала удалить нулевые значения

      _list.removeWhere((value) => value == null);
Другие вопросы по тегам