2016-01-21 26 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

相關問題