2014-10-27 80 views
2

this answer,以獲得最大的數組中,我們可以這樣做:最大和最小的浮在斯威夫特陣列

let nums = [1, 6, 3, 9, 4, 6]; 
let numMax = nums.reduce(Int.min, { max($0, $1) }) 

我們怎樣才能做同樣的Array<Float>,因爲沒有minmaxFloat

let floats: Array<Float> = [2.45, 7.21, 1.35, 10.22, 2.45, 3]; 

回答

8

這裏https://stackoverflow.com/a/24161004/1187415作品給出 用於比較的元素的所有序列的溶液,因此也爲浮點數的數組:

let floats: Array<Float> = [2.45, 7.21, 1.35, 10.22, 2.45, 3] 
let numMax = maxElement(floats) 

maxElement()在夫特庫定義爲

/// Returns the maximum element in `elements`. Requires: 
/// `elements` is non-empty. O(countElements(elements)) 
func maxElement<R : SequenceType where R.Generator.Element : Comparable>(elements: R) -> R.Generator.Element 
3

您可以使用-FLT_MAX返回的Float最小幅度,並用於同一目的

let numMax = floats.reduce(-FLT_MAX, { max($0, $1) }) 

對於Double陣列可以使用-DBL_MAX

如果你想的Float使用FLT_MAX最大幅值。 FLT_MIN是最小可表示的正浮點數。

+0

謝謝,我不知道'FLT_MIN'。 – gpbl 2014-10-27 11:42:06

+1

它應該是'-FLT_MAX',對於Float'.FLT_MIN的最小量值給出指數的最小值。所以我正在改變我的答案 – codester 2014-10-27 11:50:20

+0

我在哪裏可以找到這些變量的文檔? – gpbl 2014-10-27 11:51:59

6

只需使用第一個數組元素的初始值:

let numMax = floats.reduce(floats[0], { max($0, $1) }) 

當然你需要檢查floats陣列是沒有這樣做之前空。

+0

cadaster指出我們可以使用'FLT_MIN',無論如何謝謝! – gpbl 2014-10-27 11:42:50

1

Swift 2:

var graphPoints:[Int] = [4, 2, 6, 4, 5, 8, 3] 
let maxValue = graphPoints.maxElement()