找到两个数字中较大/较小的最聪明的方法是什么

Tas*_*ood 15 dart

寻找最聪明、最有效和最易读的方法来执行以下操作:

int one = 1, two = 2;
int larger = one < two?two:one;
Run Code Online (Sandbox Code Playgroud)

我更喜欢(或以下的可变参数版本):

int largest(one,two){return one<two?two:one;}
int larger = largest(one,two);
Run Code Online (Sandbox Code Playgroud)

但是 dart 没有内联或宏。

带清单:

var nums = [51,4,6,8];
nums.sort();
in largest = nums.last
Run Code Online (Sandbox Code Playgroud)

或者(谢谢你,君特 Zöchbauer):

print([1,2,8,6].reduce(max));
Run Code Online (Sandbox Code Playgroud)

使用数学库:

import 'dart:math';
int largest = max(21,56);
Run Code Online (Sandbox Code Playgroud)

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

为什么这样问?
使用第一种方法时,我必须检查对它们中的每一个进行比较是否正确;有时会进行数百次比较。有了第二个,只需要验证一个函数,却有数百个函数调用。

Gün*_*uer 17

我很确定只是

import 'dart:math';
int largest = max(21,56);
Run Code Online (Sandbox Code Playgroud)

是最好的方法。它足够小,可以被编译器(dart2js、VM)内联,这对读者来说是最不奇怪的。对于自定义实现,读者必须研究该函数以确定它的作用。

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

来自/sf/answers/1434367931/

import 'dart:math';

main(){
  print([1,2,8,6].reduce(max)); // 8
  print([1,2,8,6].reduce(min)); // 1
}
Run Code Online (Sandbox Code Playgroud)

重新排序列表只是为了获得最小值/最大值是非常低效的

var nums = [51,4,6,8];
nums.sort();
in largest = nums.last
Run Code Online (Sandbox Code Playgroud)

  • 唯一需要注意的是,`dart:math` 中的 `min` 和 `max` 仅在数字上定义。考虑到它们处理 `min(0.0, -0.0)` -&gt; -0.0 并且如果任一值为 NaN 则返回 NaN,因此它们在这些方面非常有效。我怀疑它们和 `a&lt;b?a:b` 一样快,但在实践中,除非我确定它是我的程序的瓶颈,否则我不会优化它。 (3认同)