我怎样才能让这个 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你可以这样做
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 双函数忽略/跳过空值?的主要内容,如果未能解决你的问题,请参考以下文章