OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 import 'utils.dart'; | 5 import 'utils.dart'; |
6 | 6 |
7 // TODO(nweiz): When sdk#26488 is fixed, use overloads to ensure that if [key] | 7 // TODO(nweiz): When sdk#26488 is fixed, use overloads to ensure that if [key] |
8 // or [value] isn't passed, `K2`/`V2` defaults to `K1`/`V1`, respectively. | 8 // or [value] isn't passed, `K2`/`V2` defaults to `K1`/`V1`, respectively. |
9 /// Creates a new map from [map] with new keys and values. | 9 /// Creates a new map from [map] with new keys and values. |
10 /// | 10 /// |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 | 68 |
69 var/*=S*/ minValue; | 69 var/*=S*/ minValue; |
70 var/*=T*/ minOrderBy; | 70 var/*=T*/ minOrderBy; |
71 for (var element in values) { | 71 for (var element in values) { |
72 var elementOrderBy = orderBy(element); | 72 var elementOrderBy = orderBy(element); |
73 if (minOrderBy == null || compare(elementOrderBy, minOrderBy) < 0) { | 73 if (minOrderBy == null || compare(elementOrderBy, minOrderBy) < 0) { |
74 minValue = element; | 74 minValue = element; |
75 minOrderBy = elementOrderBy; | 75 minOrderBy = elementOrderBy; |
76 } | 76 } |
77 } | 77 } |
78 return min; | 78 return minValue; |
79 } | 79 } |
80 | 80 |
81 /// Returns the element of [values] for which [orderBy] returns the maximum | 81 /// Returns the element of [values] for which [orderBy] returns the maximum |
82 /// value. | 82 /// value. |
83 /// | 83 /// |
84 /// The values returned by [orderBy] are compared using the [compare] function. | 84 /// The values returned by [orderBy] are compared using the [compare] function. |
85 /// If [compare] is omitted, values must implement [Comparable<T>] and they are | 85 /// If [compare] is omitted, values must implement [Comparable<T>] and they are |
86 /// compared using their [Comparable.compareTo]. | 86 /// compared using their [Comparable.compareTo]. |
87 /*=S*/ maxBy/*<S, T>*/(Iterable/*<S>*/ values, /*=T*/ orderBy(/*=S*/ element), | 87 /*=S*/ maxBy/*<S, T>*/(Iterable/*<S>*/ values, /*=T*/ orderBy(/*=S*/ element), |
88 {int compare(/*=T*/ value1, /*=T*/ value2)}) { | 88 {int compare(/*=T*/ value1, /*=T*/ value2)}) { |
89 compare ??= defaultCompare/*<T>*/(); | 89 compare ??= defaultCompare/*<T>*/(); |
90 | 90 |
91 var/*=S*/ maxValue; | 91 var/*=S*/ maxValue; |
92 var/*=T*/ maxOrderBy; | 92 var/*=T*/ maxOrderBy; |
93 for (var element in values) { | 93 for (var element in values) { |
94 var elementOrderBy = orderBy(element); | 94 var elementOrderBy = orderBy(element); |
95 if (maxOrderBy == null || compare(elementOrderBy, maxOrderBy) > 0) { | 95 if (maxOrderBy == null || compare(elementOrderBy, maxOrderBy) > 0) { |
96 maxValue = element; | 96 maxValue = element; |
97 maxOrderBy = elementOrderBy; | 97 maxOrderBy = elementOrderBy; |
98 } | 98 } |
99 } | 99 } |
100 return max; | 100 return maxValue; |
101 } | 101 } |
102 | 102 |
103 /// Returns the [transitive closure][] of [graph]. | 103 /// Returns the [transitive closure][] of [graph]. |
104 /// | 104 /// |
105 /// [transitive closure]: https://en.wikipedia.org/wiki/Transitive_closure | 105 /// [transitive closure]: https://en.wikipedia.org/wiki/Transitive_closure |
106 /// | 106 /// |
107 /// This interprets [graph] as a directed graph with a vertex for each key and | 107 /// This interprets [graph] as a directed graph with a vertex for each key and |
108 /// edges from each key to the values associated with that key. | 108 /// edges from each key to the values associated with that key. |
109 /// | 109 /// |
110 /// Assumes that every vertex in the graph has a key to represent it, even if | 110 /// Assumes that every vertex in the graph has a key to represent it, even if |
(...skipping 19 matching lines...) Expand all Loading... |
130 if (result[vertex2].contains(vertex1) && | 130 if (result[vertex2].contains(vertex1) && |
131 result[vertex1].contains(vertex3)) { | 131 result[vertex1].contains(vertex3)) { |
132 result[vertex2].add(vertex3); | 132 result[vertex2].add(vertex3); |
133 } | 133 } |
134 } | 134 } |
135 } | 135 } |
136 } | 136 } |
137 | 137 |
138 return result; | 138 return result; |
139 } | 139 } |
OLD | NEW |