在Dart中减少/过滤Map的首选方法?

时间:2015-02-08 17:46:41

标签: dictionary dart

尝试找到减少Dart中Map的最简洁方法。寻找类似于JavaScript Array.prototype.filter()

的东西

有什么建议吗?以下方法有很多不足之处:

Map ingredients = {
  'flour': '250g',
  'butter': '50g',
  'egg': 1,
  'water': '0.2l'
};

final flour = new Map.fromIterable(
  ingredients.keys.where((k) => ingredients[k] == '250g'),
  value: (k) => ingredients[k]
);

print(flour); // {flour: 250g}

1 个答案:

答案 0 :(得分:1)

核心库中没有内置的Pairs支持。但是,如果您发现自己经常这样做,可以编写一个实用程序库。例如:

library pairs;

class Pair<K,V> {
  Pair(this.k, this.v)
    final K k;
    final V v;
    String toString() => '($k, $v)';
}

Iterable<Pair> asPairs(Map map) => map.keys.map((k) => new Pair(k, map[k]));

Map fromPairs(Iterable<Pair> pairs) => new Map.fromIterables(
    pairs.map((p) => p.k),
    pairs.map((p) => p.v));

然后你可以像这样使用它:

import 'src/pairs.dart';

Map flour = fromPairs(asPairs(ingredients).where((p) => p.v == '250g'));

print(flour); // {flour: 250g}

也许这可以贡献给quiver package,这是一组非核心的实用程序。