Sejauh ini saya memiliki cara yang sederhana (tetapi berpotensi mahal):
var myMax = sort(myArray,>)[0]
Dan bagaimana saya diajarkan untuk melakukannya di sekolah:
var myMax = 0
for i in 0..myArray.count {
if (myArray[i] > myMax){myMax = myArray[i]}
}
Apakah ada cara yang lebih baik untuk mendapatkan nilai maksimum dari Array integer di Swift? Idealnya sesuatu yang satu baris seperti Ruby.max
maxElement(myArray)
. Lihat apa jawaban kedua (Rudolf Adamkovic) saat ini di bawah.Jawaban:
Diberikan:
Cepat 3:
Cepat 2:
sumber
Comparable
objek, jadiNSDecimalNumber
tidak akan berfungsi misalnya.min()
danmax()
.minElement
danmaxElement
diubah namanya menjadimin
danmax
. lihat: github.com/apple/swift-evolution/blob/master/proposals/… Saya mengerti kebingungan Anda, karena fungsinya gratismin
danmax
juga masih ada. Lihat, misalnya, gist.github.com/lorentey/d679064cb29df4558534d619319a1d9ePembaruan: Ini mungkin jawaban yang diterima sejak
maxElement
muncul di Swift.Gunakan Yang Mahakuasa
reduce
:Demikian pula:
reduce
mengambil nilai pertama yang merupakan nilai awal untuk variabel akumulator internal, lalu menerapkan fungsi yang diteruskan (di sini, anonim) ke akumulator dan setiap elemen array secara berturut-turut, dan menyimpan nilai baru dalam akumulator. Nilai akumulator terakhir kemudian dikembalikan.sumber
nums.reduce(Int.min, max)
karenamax
prototipe sudah cocok dengan tipe yangreduce
diharapkanlet numMax = nums.reduce(Int.min, combine: max)
Dengan Swift 5,
Array
seperti objekSequence
Protokol lain yang sesuai (Dictionary
,,Set
dll), memiliki dua metode yang dipanggilmax()
danmax(by:)
yang mengembalikan elemen maksimum dalam urutan ataunil
jika urutannya kosong.# 1. Menggunakan
Array
'smax()
metodeJika jenis elemen dalam urutan sesuai untuk
Comparable
protokol (mungkin ituString
,Float
,Character
atau salah satu dari kelas kustom atau struct), Anda akan dapat menggunakanmax()
yang memiliki berikut deklarasi :Kode Playground berikut ditampilkan untuk digunakan
max()
:# 2. Menggunakan
Array
'smax(by:)
metodeJika jenis elemen di dalam urutan Anda tidak sesuai dengan
Comparable
protokol, Anda harus menggunakanmax(by:)
yang memiliki deklarasi berikut :Kode Playground berikut ditampilkan untuk digunakan
max(by:)
:sumber
Jawaban lainnya semuanya benar, namun jangan lupa Anda juga bisa menggunakan operator collection, sebagai berikut:
Anda juga dapat menemukan rata-rata dengan cara yang sama:
Sintaks ini mungkin kurang jelas dibandingkan beberapa solusi lain, tetapi menarik untuk dilihat bahwa
-valueForKeyPath:
masih dapat digunakan :)sumber
Anda dapat menggunakan dengan
reduce
:sumber
sumber
var myMax = sort(myArray,>)[0]
Dengan Swift 1.2 (dan mungkin sebelumnya) Anda sekarang perlu menggunakan:
Untuk bekerja dengan nilai ganda saya menggunakan sesuatu seperti ini:
sumber
let numMax = nums.reduce(-Double.infinity, combine: max)
, tanda tangan fungsi maks cocok dengan tanda tangan parameter gabungan.Di Swift 2.0,
minElement
danmaxElement
menjadi metodeSequenceType
protokol, Anda harus memanggilnya seperti:Menggunakan
maxElement
sebagai fungsi sepertimaxElement(a)
ini tidak tersedia sekarang.Sintaks Swift sedang berubah, jadi saya bisa mengonfirmasi ini di Xcode versi7 beta6 .
Ini mungkin diubah di masa mendatang, jadi saya sarankan Anda lebih baik memeriksa dokumen sebelum Anda menggunakan metode ini.
sumber
Swift 3.0.0
Anda dapat mencoba kode ini secara terprogram.
sumber
Berikut adalah tes kinerja untuk solusi yang diposting di sini. https://github.com/tedgonzalez/MaxElementInCollectionPerformance
Ini yang tercepat untuk Swift 5
array.max()
sumber
Gunakan di bawah baris kode sederhana untuk menemukan max dari array;
sumber
Anda juga dapat mengurutkan array Anda lalu menggunakan
array.first
atauarray.last
sumber