| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 // Collection<T> supports most of the ES 5 Array methods, but it's missing | |
| 6 // map and reduce. | |
| 7 | |
| 8 // TODO(jmesserly): we might want a version of this that return an iterable, | |
| 9 // however JS, Python and Ruby versions are all eager. | |
| 10 List map(Iterable source, mapper(source)) { | |
| 11 List result = new List(); | |
| 12 if (source is List) { | |
| 13 List list = source; // TODO: shouldn't need this | |
| 14 result.length = list.length; | |
| 15 for (int i = 0; i < list.length; i++) { | |
| 16 result[i] = mapper(list[i]); | |
| 17 } | |
| 18 } else { | |
| 19 for (final item in source) { | |
| 20 result.add(mapper(item)); | |
| 21 } | |
| 22 } | |
| 23 return result; | |
| 24 } | |
| 25 | |
| 26 reduce(Iterable source, callback, [initialValue]) { | |
| 27 final i = source.iterator; | |
| 28 | |
| 29 var current = initialValue; | |
| 30 if (current == null && i.moveNext()) { | |
| 31 current = i.current; | |
| 32 } | |
| 33 while (i.moveNext()) { | |
| 34 current = callback(current, i.current); | |
| 35 } | |
| 36 return current; | |
| 37 } | |
| 38 | |
| 39 List zip(Iterable left, Iterable right, mapper(left, right)) { | |
| 40 List result = new List(); | |
| 41 var x = left.iterator; | |
| 42 var y = right.iterator; | |
| 43 while (x.moveNext()) { | |
| 44 if (!y.moveNext()) { | |
| 45 throw new ArgumentError(); | |
| 46 } | |
| 47 result.add(mapper(x.current, y.current)); | |
| 48 } | |
| 49 if (y.moveNext()) { | |
| 50 throw new ArgumentError(); | |
| 51 } | |
| 52 return result; | |
| 53 } | |
| 54 | |
| 55 | |
| OLD | NEW |