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

时间:2016-01-21 07:18:53

标签: dart

寻找最智能,最有效和最易读的方法:

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没有内联或宏。

使用List:

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

或(谢谢你,GünterZöchbauer):

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

使用数学库:

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

可能是最好的,但与第一种方法相比,效率是多少?

为什么这个问题?
在第一种方法中,我必须检查每种方法的比较是否正确;有时数百种。使用第二个,只有一个函数可以验证,但是有数百个函数调用。

1 个答案:

答案 0 :(得分:4)

我非常确定

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