2015-02-08 42 views
1

試圖找到最簡潔的方式來減少飛鏢中的地圖。尋找類似JavaScript的東西Array.prototype.filter()在Dart中減少/過濾地圖的首選方法?

有什麼建議嗎?以下方法留下了許多不足之處:

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

看起來不錯。 。 .. – 2015-02-08 19:32:24

+0

https://code.google.com/p/dart/issues/detail?id=7088 – 2015-02-09 01:27:37

回答

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,一套非核心事業來貢獻。