Вот обертка вокруг подхода MartinR, чтобы упростить интеграцию с другим кодом Swift:

исал алгоритм Swift для нахождения максимального значения и его индекса в массиве Swift. Это вдохновлено функцией "max.m" в Matlab & Octave.

Могут ли эксперты здесь предложить способ улучшить этот алгоритм с точки зрения скорости? Я имею в виду, можно ли сделать это быстрее или вы думаете, что это разумный подход для больших массивов (иногда 15000 выборок).

public func max (y: [Double]) -> (Int, Double) {

let inLen = y.count

var out = Double()
var outp = Int()

if (1 == inLen) { // if only one element
    out = y[0]
    outp = 0
} else if (0 == inLen) { // if no elements
    out = -1
    outp = -1
} else {
    out = y[0]
    outp = 0
    for ii in 1...inLen-1 {
        if (out<y[ii]){
            out = y[ii]
            outp = ii
        }
    }
}
return (outp, out)
}

// Call the function

let y: [Double] = [3, 4, 5, 6, 7, 8, 9, 100, 100, 11, 12, 13, 14, 15, -8, -7, -7, 99]
let (ind, value) = max(y: y)
print(ind) // 7
print(value) // 100.0 

Ответы на вопрос(2)

Ваш ответ на вопрос