Map接口似乎不提供对可迭代条目的访问,也没有公开where方法来过滤条目.我错过了什么吗?有一个简单的解决方法吗?
例如
Map map;
final filteredMap = map.where((k, v) => k.startsWith("foo"));
Run Code Online (Sandbox Code Playgroud)
添加了Dart 2.0.0 removeWhere,可用于过滤Map实体。给定您的示例,您可以将其应用为:
Map map;
final filteredMap = Map.from(map)..removeWhere((k, v) => !k.startsWith("foo"));
Run Code Online (Sandbox Code Playgroud)
这不是where您要求的方法,但是通过这种方式过滤Map实体当然是可行的。
您可以使用
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'));
}
Run Code Online (Sandbox Code Playgroud)
由于 Dart 2.0 Maps 有一个条目 getter 返回一个,Iterable<MapEntry<K, V>>因此您可以执行以下操作:
MapEntry theOne = map.entries.firstWhere((entry) {
return entry.key.startsWith('foo');
}, orElse: () => MapEntry(null, null));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4027 次 |
| 最近记录: |