寻找最聪明、最高效、可读性最强的方法来完成以下任务:

int one = 1, two = 2;
int larger = one < two?two:one;

我更喜欢(或以下内容的不同版本):

int largest(one,two){return one<two?two:one;}
int larger = largest(one,two);

但DART没有内联或宏.

带有列表:

var nums = [51,4,6,8];
nums.sort();
in largest = nums.last

或者(谢谢你,君特·泽赫鲍尔):

print([1,2,8,6].reduce(max));

使用数学库:

import 'dart:math';
int largest = max(21,56);

也许是最好的,但是与第一种方法相比,max的效率如何呢?

为什么要问这个问题?
对于第一种方法,我必须判断是否对每一个都进行了正确的比较;有时会有数百个.对于第二个,只有一个函数需要验证,但是有数百个函数调用.

推荐答案

我很确定只是

import 'dart:math';
int largest = max(21,56);

是最好的办法.它足够小,可以由编译器(dart2js,vm)内联,对读者来说也是最小的惊喜.对于自定义实现,读者必须调查函数以确定它的作用.

对于值集合,我发现这是最优雅的方式

https://stackoverflow.com/a/20490970/217408

import 'dart:math';

main(){
  print([1,2,8,6].reduce(max)); // 8
  print([1,2,8,6].reduce(min)); // 1
}

仅仅为了得到最小值/最大值而对列表重新排序是非常低效的

var nums = [51,4,6,8];
nums.sort();
in largest = nums.last

Dart相关问答推荐

如何防止 Riverpod 的 ConsumerWidget 重建管理 ThemeMode

Flutter Getx - 未找到Xxx.您需要调用Get.put(Xxx()) - 但我已调用 Get.put(Xxx())

Dart/Flutter ffi(外部函数接口)本机回调,例如:sqlite3_exec

Dart 中的静态构造函数

Angular Dart 和 Polymer Dart 的区别

flutter pub run build_runner 卡住了

如何在flutter中使用rootBundle加载图片?

如何在 Flutter 中更改 Html 小部件中的字体样式?

如何在Flatter中打开设备GPS?

dart:类构造函数被标记为const是什么意思

使用 Google Dart 进行数据库查询?

如何从目录中获取文件列表并将其传递给ListView?

Dart:默认 gitignore?

Flutter 构建失败. Android 依赖 'androidx.core:core' 的编译(1.0.0)和运行时(1.0.1)类路径有不同的版本

如何为 macos 桌面应用启用 Flutter 上网权限?

在 Dart 中调用异步函数而不等待,例如启动一个线程

有 Javascript 到 Dart 的转换器吗?

在 Dart 中是否允许在 for 循环中等待?

包裹构造函数参数的花括号代表什么?

如何在 Dart 中将日期/时间字符串转换为 DateTime 对象?