Map接口似乎没有提供对条目的可迭代访问,也没有公开where方法来过滤条目。我错过了什么吗?有简单的解决方法吗?例如:
Map map; final filteredMap = map.where((k, v) => k.startsWith("foo"));
mec1mxoz1#
更新:使用control flow collection statements,您还可以执行以下操作:
final filteredMap = { for (final key in map.keys) if (!key.startsWith('foo')) key: map[key] };
原答复:Dart 2.0.0增加了removeWhere,可以用来过滤Map实体。给出你的例子,你可以应用它:
removeWhere
Map map; final filteredMap = Map.from(map)..removeWhere((k, v) => !k.startsWith("foo"));
这不是您所要求的where方法,但过滤Map实体肯定可以通过这种方式实现。
where
jhiyze9q2#
由于Dart 2.0 Map有一个返回Iterable<MapEntry<K, V>>的条目获取器,因此您可以执行以下操作:
Iterable<MapEntry<K, V>>
MapEntry theOne = map.entries.firstWhere((entry) { return entry.key.startsWith('foo'); }, orElse: () => MapEntry(null, null));
oxiaedzo3#
您可以使用
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')); }
k2fxgqgv4#
我使用的是dartx,它是filter方法
filter
var myMap = { "a": [1, 2, 3], "b": [4, 5, 6], "c": [7, 8, 9], }; var result = myMap.filter((entry) => entry.key != "a");
4条答案
按热度按时间mec1mxoz1#
更新:使用control flow collection statements,您还可以执行以下操作:
原答复:Dart 2.0.0增加了
removeWhere
,可以用来过滤Map实体。给出你的例子,你可以应用它:这不是您所要求的
where
方法,但过滤Map实体肯定可以通过这种方式实现。jhiyze9q2#
由于Dart 2.0 Map有一个返回
Iterable<MapEntry<K, V>>
的条目获取器,因此您可以执行以下操作:oxiaedzo3#
您可以使用
k2fxgqgv4#
我使用的是dartx,它是
filter
方法