如何使用 dart null-safety 对可能包含空值的列表进行排序

How to sort a list that could contain null values with dart null-safety

我有一个可能包含空值的字符串列表,我该如何对这个列表进行排序?

我正在使用 Flutter beta 通道,因此检查了 null-safety。这是我目前所拥有的:

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

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

如何得到这个结果:

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

您需要修改排序方法以处理可为 null 的值,而不仅仅是忽略它们。处理潜在的空值后,您可以正常比较它们。

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

我最近遇到了这个,并基于compareTo documentation:

构建了一个单行函数
myList.sort((a, b) => a==null ? 1: b==null? -1 : a.compareTo(b));

注意:这会在列表末尾带来空值。在您的情况下,只需交换 -1 和 1 即可将它们放在列表的前面。

您也可以使用 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]
}