我怎样才能让这个 Map 双函数忽略/跳过空值?

Posted

技术标签:

【中文标题】我怎样才能让这个 Map 双函数忽略/跳过空值?【英文标题】:How can I have this Map double function ignore/skip over empty values? 【发布时间】:2020-09-28 18:46:48 【问题描述】:

这里是:

Map<double, double> m2 = (await sheet.values.map.column(3, fromRow: 2))
        .map((key, value) => MapEntry(double.parse(key), double.parse(value)));
    List longitudelist = m2.values.toList();

我用它从 Google 表格中获取坐标。问题是,当没有纬度或经度时,整个事情都会崩溃。

我已经在它下面尝试过,但它没有用:

latitudelist.removeWhere((isEmpty) => isEmpty == "0.0");

错误:

未处理的异常:FormatException: Invalid double

这是一个无效的替身,因为那里什么都没有。它不为空。如果纬度或经度坐标不存在,有人知道如何跳过值吗?

【问题讨论】:

当您在没有纬度值的单元格上执行double.parse(value) 时,它会返回什么?如果它是 null 或无法解析为 double 的东西,也许您可​​以执行类似 MapEntry(double.parse(key), value == null ? null : double.tryparse(value)) 的操作,然后检查 null 值 它什么也不返回:E/flutter (6792): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] 未处理异常:FormatException: Invalid double E/flutter (6792) : E/flutter (6792): #0 double.parse (dart:core-patch/double_patch.dart:111:28) 现在试试你的建议 断言失败:第 19 行第 16 行:'纬度!= null':不正确。 parse 和 tryparse 如果值为空(或在您的情况下为空,因为空确实为空,除非您可以看到空字符串 '' 'latitude != null': 不正确,这个纬度值在哪里使用?在您的代码中看不到它 【参考方案1】:

您可以使用 collection-for 来避免首先尝试从 null 值或空字符串创建 Map 条目:

Map<double, double> m2 = 
  for (var mapEntry in (await sheet.values.map.column(3, fromRow: 2).entries)
    if (mapEntry.key != null && mapEntry.key.isNotEmpty &&
        mapEntry.value != null && mapEntry.value.isNotEmpty)
      double.parse(mapEntry.key): double.parse(mapEntry.value),
;
List<double> longitudelist = m2.values.toList();

【讨论】:

“Set>”类型的值不能分配给“Map”类型的变量。 @tsy5176 哎呀,已修复。【参考方案2】:

你可以这样做

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

【讨论】:

我试过了。没用。我的价值不为空。它是空的。我在这里停下来: MapEntry(double.parse(key), double.parse(value))); 如果无法使用double.parse(key) 将key 转换为double,那么它将返回null。所以你当时必须按照@EdwynZN 的建议处理空值。 @tsy5176 在原始转换中在toList 之前使用where 比在事后使用removeWhere 要干净得多。【参考方案3】:

您可以在toList 方法之前使用where

List longitudelist = m2.values.where((v) => v != null).toList();

【讨论】:

可能应该提到这取决于使用double.tryParse 而不是double.parse

以上是关于我怎样才能让这个 Map 双函数忽略/跳过空值?的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能坚持protobuf网可为空值的数组

Symfony在序列化期间跳过空值

如何在 Spark JSON 中不跳过空值?

angularjs ng重复svg跳过空值的索引

ORACLE查询条件为空,则跳过该条件。

使 LEAST() 函数返回一个非空值