Map接口似乎不提供对可迭代条目的访问,也没有公开where方法来过滤条目。我错过了什么吗?有一个简单的解决方法吗?
e.g。
Map map;
final filteredMap = map.where((k, v) => k.startsWith("foo"));
答案 0 :(得分:5)
您可以使用
library x;
void main(List<String> args) {
Map map = {'key1': 'aölsjfd', 'key2': 'oiweuwrow', 'key11': 'oipoip', 'key13': 'werwr'};
final filteredMap = new Map.fromIterable(
map.keys.where((k) => k.startsWith('key1')), key: (k) => k, value: (k) => map[k]);
filteredMap.forEach((k, v) => print('key: $k, value: $v'));
}
答案 1 :(得分:2)
Dart 2.0.0添加了removeWhere
,可用于过滤Map实体。给出您的示例,您可以将其应用为:
Map map;
final filteredMap = Map.from(map)..removeWhere((k, v) => !k.startsWith("foo"));
这不是您要求的where
方法,但是通过这种方式过滤Map实体当然是可行的。
答案 2 :(得分:0)
由于Dart 2.0 Maps具有一个返回Iterable<MapEntry<K, V>>
的条目获取器,因此您可以执行以下操作:
MapEntry theOne = map.entries.firstWhere((entry) {
return entry.key.startsWith('foo');
}, orElse: () => MapEntry(null, null));