Как отсортировать список, который может содержать нулевые значения, с нулевой безопасностью 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);