尝试找到减少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}
答案 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,这是一组非核心的实用程序。