用dart语言从列表中填充null的最佳方法是什么?

时间:2015-12-29 15:18:52

标签: dart

寻找与Python过滤器相当的飞镖

a = ['', None,4]
[print(e) for e in filter(None,a)]

我的代码太丑了:

List a = [null,2,null];
List b=new List();
for(var e in a){if(e==null) b.add(e);}
for(var e in b){a.remove(e);}
print(a);

5 个答案:

答案 0 :(得分:31)

在具有声音零安全性的新 dart 2.12 中,最好的方法是:

List<int?> a = [null,2,null];
final List<int> b = a.whereType<int>().toList();

答案 1 :(得分:8)

您可以使用列表的removeWhere方法,如下所示:

List a = [null, 2, null];
a.removeWhere((value) => value == null);
print(a); // prints [2]

答案 2 :(得分:4)

  a.where((x) => x != null).forEach(print);

答案 3 :(得分:3)

在现代 Dart 中,您可以使用“collection if”和“collection for”,它们类似于 Python 的列表推导式:

List a = [null, 2, null];
List b = [for (var i in a) if (i != null) i];
print(b); // prints [2]

来源:https://github.com/dart-lang/language/blob/master/accepted/2.3/control-flow-collections/feature-specification.md#composing

答案 4 :(得分:0)

我用@Wesley Changs 的回答做了一个扩展函数。

  extension ConvertIterable<T> on Iterable<T?> {
    List<T> toNonNullList() {
      return this.whereType<T>().toList();
    }
  }

你可以像下面这样使用。

  List<int?> a = [null,2,null];
  final List<int> b = a.toNonNullList();