dart 如何过滤Map/访问条目

mzillmmw  于 2022-12-16  发布在  其他
关注(0)|答案(4)|浏览(161)

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

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

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实体。给出你的例子,你可以应用它:

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

这不是您所要求的where方法,但过滤Map实体肯定可以通过这种方式实现。

jhiyze9q

jhiyze9q2#

由于Dart 2.0 Map有一个返回Iterable<MapEntry<K, V>>的条目获取器,因此您可以执行以下操作:

MapEntry theOne = map.entries.firstWhere((entry) {
        return entry.key.startsWith('foo');
      }, orElse: () => MapEntry(null, null));
oxiaedzo

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'));
}
k2fxgqgv

k2fxgqgv4#

我使用的是dartx,它是filter方法

var myMap = {
    "a": [1, 2, 3],
    "b": [4, 5, 6],
    "c": [7, 8, 9],
  };

  var result = myMap.filter((entry) => entry.key != "a");

相关问题