Hasta ahora tengo una forma simple (pero potencialmente costosa):
var myMax = sort(myArray,>)[0]
Y cómo me enseñaron a hacerlo en la escuela:
var myMax = 0
for i in 0..myArray.count {
if (myArray[i] > myMax){myMax = myArray[i]}
}
¿Existe una mejor manera de obtener el valor máximo de una matriz de enteros en Swift? Idealmente, algo que sea de una línea como Ruby.max

maxElement(myArray). Vea cuál es actualmente la segunda respuesta (la de Rudolf Adamkovic) a continuación.Respuestas:
Dado:
Swift 3:
Rápido 2:
fuente
Comparableobjetos, porNSDecimalNumberlo que no funcionará, por ejemplo.min()ymax().minElementymaxElementfueron renombrados aminymax. ver: github.com/apple/swift-evolution/blob/master/proposals/… Entiendo su confusión, porque las funciones gratuitasminymaxtambién existen. Ver, por ejemplo, gist.github.com/lorentey/d679064cb29df4558534d619319a1d9eActualización: esta probablemente debería ser la respuesta aceptada desde que
maxElementapareció en Swift.Usa el todopoderoso
reduce:Similar:
reducetoma un primer valor que es el valor inicial para una variable acumuladora interna, luego aplica la función pasada (aquí, es anónima) al acumulador y a cada elemento de la matriz sucesivamente, y almacena el nuevo valor en el acumulador. A continuación, se devuelve el último valor del acumulador.fuente
nums.reduce(Int.min, max)dado quemaxel prototipo de 'ya coincide con el tipo quereducese esperalet numMax = nums.reduce(Int.min, combine: max)Con Swift 5,
Arrayal igual que otrosSequenceobjetos de protocolo conforme (Dictionary,Set, etc.), tiene dos métodos llamadosmax()ymax(by:)que retornan el máximo elemento en la secuencia onilsi la secuencia está vacía.# 1. Usando
Arrayelmax()método deSi el tipo de elemento dentro de la secuencia se ajusta a
Comparableprotocolos (puede serString,Float,Charactero uno de su clase personalizada o estructura), usted será capaz de usarmax()que tiene la siguiente declaración :Se muestran los siguientes códigos de Playground para usar
max():# 2. Usando
Arrayelmax(by:)método deSi el tipo de elemento dentro de su secuencia no se ajusta al
Comparableprotocolo, deberá usarmax(by:)que tenga la siguiente declaración :Se muestran los siguientes códigos de Playground para usar
max(by:):fuente
Las otras respuestas son todas correctas, pero no olvide que también puede usar operadores de recolección, de la siguiente manera:
también puedes encontrar el promedio de la misma manera:
Esta sintaxis puede ser menos clara que algunas de las otras soluciones, pero es interesante ver que
-valueForKeyPath:aún se puede usar :)fuente
Puede usar con
reduce:fuente
fuente
var myMax = sort(myArray,>)[0]Con Swift 1.2 (y tal vez antes) ahora necesita usar:
Para trabajar con valores dobles usé algo como esto:
fuente
let numMax = nums.reduce(-Double.infinity, combine: max), la firma de la función máxima coincide con la firma del parámetro combine :.En Swift 2.0, los métodos de protocolo
minElementy semaxElementconviertenSequenceType, debería llamarlos como:El uso
maxElementcomo función como nomaxElement(a)está disponible ahora.La sintaxis de Swift está cambiando, así que puedo confirmar esto en Xcode versión 7 beta6 .
Es posible que se modifique en el futuro, por lo que le sugiero que consulte el documento antes de usar estos métodos.
fuente
Swift 3.0
Puede probar este código mediante programación.
fuente
Aquí hay una prueba de rendimiento para las soluciones publicadas aquí. https://github.com/tedgonzalez/MaxElementInCollectionPerformance
Este es el más rápido para Swift 5
array.max()fuente
Utilice las siguientes líneas de código simples para encontrar el máximo de la matriz;
fuente
También puede ordenar su matriz y luego usar
array.firstoarray.lastfuente