如何使用 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]
}
我有一个可能包含空值的字符串列表,我该如何对这个列表进行排序?
我正在使用 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]
}