2016-01-21 38 views
3

在寻找最聪明的,最有效,最可读的方式的小做以下最聪明的办法:什么是找到更大的/两数

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); 

但是飞镖没有内联或宏。

随着列表:

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

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

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

使用数学库:

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

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

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

+0

参见HTTP ://stackoverflow.com/questions/20490868/dart-list-min-max-value/20490970#20490970 –

回答

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 
} 

重新排序名单只是为了获得最小

/max是相当低效

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

唯一需要注意的是,'dart:math'中的'min'和'max'仅在数字上定义秒。考虑到它们处理'min(0.0,-0.0)' - > -0.0并且如果任一值是NaN都返回NaN,它们在那些上非常有效。我怀疑它们和'a lrn