1

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

我正在使用Flutter beta 通道,因此检查了null 安全性。这是我到目前为止所拥有的:

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

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

我如何得到这个结果:

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

3 回答 3

6

我最近遇到了这个问题,并根据compareTo 文档构建了一个单行函数:

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

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

于 2021-02-16T16:58:59.517 回答
5

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

_list.sort((a, b) {
  if(a == null) {
    return -1;
  }
  if(b == null) {
    return 1;
  }
  return a.compareTo(b);
}); 
于 2021-02-16T16:31:46.817 回答
0

你也可以使用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]
}
于 2021-05-27T15:48:29.053 回答