У меня пока есть простой (но потенциально дорогой) способ:
var myMax = sort(myArray,>)[0]
И как меня этому учили в школе:
var myMax = 0
for i in 0..myArray.count {
if (myArray[i] > myMax){myMax = myArray[i]}
}
Есть ли лучший способ получить максимальное значение из целочисленного массива в Swift? В идеале что-то из одной строчки, например, Ruby's.max
maxElement(myArray)
. Посмотрите, какой в настоящее время второй ответ (Рудольфа Адамковича) ниже.Ответы:
Дано:
Swift 3:
Swift 2:
источник
Comparable
объектами, поэтомуNSDecimalNumber
, например, работать не будет.min()
иmax()
.minElement
иmaxElement
были переименованы вmin
иmax
. см: github.com/apple/swift-evolution/blob/master/proposals/... Я понимаю ваше замешательство, потому что свободные функцииmin
иmax
также по- прежнему существуют. См., Например, gist.github.com/lorentey/d679064cb29df4558534d619319a1d9eОбновление: вероятно, это должен быть принятый ответ с момента
maxElement
появления в Swift.Используйте всемогущий
reduce
:Так же:
reduce
принимает первое значение, которое является начальным значением для внутренней переменной аккумулятора, затем последовательно применяет переданную функцию (в данном случае анонимно) к аккумулятору и каждому элементу массива и сохраняет новое значение в аккумуляторе. Затем возвращается последнее значение аккумулятора.источник
nums.reduce(Int.min, max)
посколькуmax
прототип уже соответствуетreduce
ожидаемомуlet numMax = nums.reduce(Int.min, combine: max)
С Swift 5
Array
, как и другимSequence
протоколом , соответствующими объекты (Dictionary
,Set
, и т.д.), имеет два метода , называемыеmax()
иmax(by:)
что возвращение максимального элемент в последовательности или ,nil
если последовательность пуста.# 1. Использование
Array
«Smax()
методЕсли тип элемента внутри вашей последовательности Соответствия норм по
Comparable
протоколу (это может бытьString
,Float
,Character
или один из пользовательского класса или структуры), вы будете иметь возможность использовать ,max()
что имеет следующее заявление :Следующие коды игровых площадок показаны для использования
max()
:# 2. Использование
Array
«Smax(by:)
методЕсли тип элемента внутри вашей последовательности не соответствует
Comparable
протоколу, вам придется использоватьmax(by:)
его со следующим объявлением :Следующие коды игровых площадок показаны для использования
max(by:)
:источник
Все остальные ответы верны, но не забывайте, что вы также можете использовать операторы сбора, как показано ниже:
вы также можете найти среднее значение таким же образом:
Этот синтаксис может быть менее ясным, чем некоторые другие решения, но интересно видеть, что
-valueForKeyPath:
его все еще можно использовать :)источник
Вы можете использовать с
reduce
:источник
источник
var myMax = sort(myArray,>)[0]
В Swift 1.2 (и, возможно, ранее) вам теперь нужно использовать:
Для работы со значениями Double я использовал что-то вроде этого:
источник
let numMax = nums.reduce(-Double.infinity, combine: max)
, максимальная сигнатура функции соответствует сигнатуре comb: parameter.В Swift 2.0 методы протокола
minElement
иmaxElement
становятсяSequenceType
, их следует называть следующим образом:Использование в
maxElement
качестве функции , какmaxElement(a)
это недоступно в настоящее время.Синтаксис Swift постоянно меняется, поэтому я могу просто подтвердить это в Xcode version7 beta6 .
Он может быть изменен в будущем, поэтому я предлагаю вам лучше проверить документ, прежде чем использовать эти методы.
источник
Swift 3.0
Вы можете попробовать этот код программно.
источник
Вот тест производительности для решений, размещенных здесь. https://github.com/tedgonzalez/MaxElementInCollectionPerformance
Это самый быстрый для Swift 5
array.max()
источник
Используйте приведенные ниже простые строки кода, чтобы найти максимум из массива;
источник
Вы также можете отсортировать свой массив, а затем использовать
array.first
илиarray.last
источник