如何过滤地图/访问条目

时间:2014-01-15 06:54:30

标签: dart

Map接口似乎不提供对可迭代条目的访问,也没有公开where方法来过滤条目。我错过了什么吗?有一个简单的解决方法吗?

e.g。

Map map;
final filteredMap = map.where((k, v) => k.startsWith("foo"));

3 个答案:

答案 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));