Dartでリストの最小値と最大値を取得するにはどうすればよいですか。
[1, 2, 3, 4, 5].min //returns 1
[1, 2, 3, 4, 5].max //returns 5
a)短い関数を作成するか、b)コピーしてリストを並べ替え、最後の値を選択します。
しかし、もしあればもっとネイティブな解決策があるかどうかを探しています。
リストが空ではないと仮定すると、 Iterable.reduce を使用できます。
import 'Dart:math';
main(){
print([1,2,8,6].reduce(max)); // 8
print([1,2,8,6].reduce(min)); // 1
}
インポートしたくない場合はDart: math
であり、引き続きreduce
を使用したい場合:
main() {
List list = [2,8,1,6]; // List should not be empty.
print(list.reduce((curr, next) => curr > next? curr: next)); // 8 --> Max
print(list.reduce((curr, next) => curr < next? curr: next)); // 1 --> Min
}
an extension
Dart 2.6現在 でこれを実現できます:
import 'Dart:math';
void main() {
[1, 2, 3, 4, 5].min; // returns 1
[1, 2, 3, 4, 5].max; // returns 5
}
extension FancyIterable on Iterable<int> {
int get max => reduce(math.max);
int get min => reduce(math.min);
}
非効率的な方法:
var n = [9, -2, 5, 6, 3, 4, 0];
n.sort();
print('Max: ${n.last}'); // Max: 9
print('Min: ${n[0]}'); // Min: -2
'Dart:math'ライブラリをインポートしない場合:
var n = [9, -2, 5, 6, 3, 4, 0];
int minN = n[0];
int maxN = n[0];
n.skip(1).forEach((b) {
minN = minN.compareTo(b) >= 0 ? b : minN;
maxN = maxN.compareTo(b) >= 0 ? maxN : b;
});
print('Max: $maxN'); // Max: 9
print('Min: $minN'); // Min: -2