katakanlah kita memiliki kelas khusus bernama imageFile dan kelas ini berisi dua properti.
class imageFile {
var fileName = String()
var fileID = Int()
}
banyak dari mereka disimpan di Array
var images : Array = []
var aImage = imageFile()
aImage.fileName = "image1.png"
aImage.fileID = 101
images.append(aImage)
aImage = imageFile()
aImage.fileName = "image1.png"
aImage.fileID = 202
images.append(aImage)
pertanyaannya adalah: bagaimana saya bisa mengurutkan array gambar dengan 'fileID' ASC atau DESC?
Jawaban:
Pertama, nyatakan Array Anda sebagai array yang diketik sehingga Anda dapat memanggil metode saat Anda mengulangi:
Maka Anda cukup melakukan:
Cepat 2
Swift 3+
Contoh di atas memberikan urutan penguraian
sumber
NSManagedObject
subkelas yang disebut CheckInAndOut . Dan dalam file terpisah, saya telah mendeklarasikan array yang diketik untuk objek jenis ini dan ketika saya mencoba untuk mengurutkannya , saya mendapatkan Tidak dapat menemukan kesalahan anggota . ada yang tahu ini kenapa?firstName
danlastName
dalam arrayPerson
objek. Pertama saya ingin mengatasinyafirstName
dululastName
. Bagaimana saya bisa melakukan ini?images.sortInPlace({ $0.fileID > $1.fileID })
?[ Diperbarui untuk Swift 3 dengan sortir (berdasarkan :) ] Ini, mengeksploitasi penutupan tambahan:
di mana Anda menggunakan
<
atau>
bergantung pada ASC atau DESC, masing-masing. Jika Anda ingin memodifikasiimages
array , gunakan yang berikut ini:Jika Anda akan melakukan ini berulang kali dan lebih memilih untuk mendefinisikan suatu fungsi, salah satu caranya adalah:
dan kemudian gunakan sebagai:
sumber
sort
tidak lagi mengkompilasi dengan sintaks ini di Xcode 8. Xcode 8 mengatakan$0.fileID < $1.fileID
menghasilkan Bool bukan ComparisonResult.Hampir semua orang memberikan caranya secara langsung, izinkan saya menunjukkan evolusi:
Anda dapat menggunakan metode instance Array:
Untuk penjelasan terperinci tentang prinsip kerja sortir, lihat The Sorted Function .
sumber
Cepat 3
sumber
people.sort { $0.email > $1.email }
Dengan Swift 5,
Array
memiliki dua metode yang disebutsorted()
dansorted(by:)
. Metode pertamasorted()
,, memiliki deklarasi berikut:Metode kedua
sorted(by:)
,, memiliki deklarasi berikut:# 1. Urutkan dengan urutan menaik untuk objek yang sebanding
Jika tipe elemen di dalam koleksi Anda sesuai dengan
Comparable
protokol, Anda akan dapat menggunakannyasorted()
untuk mengurutkan elemen Anda dengan urutan menaik. Kode Playground berikut menunjukkan cara menggunakansorted()
:# 2. Urutkan dengan urutan menurun untuk objek yang sebanding
Jika tipe elemen di dalam koleksi Anda sesuai dengan
Comparable
protokol, Anda harus menggunakannyasorted(by:)
untuk mengurutkan elemen Anda dengan urutan menurun.# 3. Urutkan dengan urutan naik atau turun untuk objek yang tidak sebanding
Jika jenis elemen di dalam koleksi Anda TIDAK sesuai dengan
Comparable
protokol, Anda harus menggunakansorted(by:)
untuk mengurutkan elemen Anda dengan urutan naik atau turun.Perhatikan bahwa Swift juga menyediakan dua metode yang disebut
sort()
dansort(by:)
sebagai mitrasorted()
dansorted(by:)
jika Anda perlu mengurutkan koleksi di tempat.sumber
Di Swift 3.0
sumber
Anda juga dapat melakukan sesuatu seperti
jadi array gambar Anda akan disimpan sebagai diurutkan
sumber
Swift 2 hingga 4
Jawaban asli berusaha mengurutkan array objek kustom menggunakan beberapa properti. Di bawah ini saya akan menunjukkan kepada Anda beberapa cara praktis untuk melakukan perilaku yang sama dengan struktur data cepat!
Hal-hal kecil keluar dari jalan, saya mengubah ImageFile sedikit. Dengan mengingat hal itu, saya membuat array dengan tiga file gambar. Perhatikan bahwa metadata adalah nilai opsional, melewati nil sebagai parameter yang diharapkan.
ImageFile memiliki ukuran properti bernama. Untuk contoh berikut saya akan menunjukkan kepada Anda bagaimana menggunakan operasi sortir w / properti seperti ukuran.
ukuran terkecil hingga terbesar (<)
terbesar ke terkecil (>)
Selanjutnya kita akan mengurutkan menggunakan nama properti String. Dengan cara yang sama, gunakan sortir untuk membandingkan string. Tetapi perhatikan blok dalam mengembalikan hasil perbandingan. Hasil ini akan menentukan jenis.
AZ (.orderedAscending)
ZA (.orderedDescending)
Berikutnya adalah cara favorit saya untuk mengurutkan, dalam banyak kasus seseorang akan memiliki properti opsional. Sekarang jangan khawatir, kita akan mengurutkan dengan cara yang sama seperti di atas kecuali kita harus menangani nihil! Dalam produksi;
Saya menggunakan kode ini untuk memaksa semua instance dalam array saya dengan nilai properti nil menjadi yang terakhir. Kemudian pesan metadata menggunakan nilai yang diasumsikan terbuka.
Dimungkinkan untuk memiliki jenis sekunder untuk opsional. Sebagai contoh; orang dapat menampilkan gambar dengan metadata dan dipesan berdasarkan ukuran.
sumber
Dua alternatif
1) Memesan array asli dengan sortInPlace
2) Menggunakan array alternatif untuk menyimpan array yang dipesan
sumber
var assignmentsO : [Assignment]
atau menggabungkannya menjadi satu baris dengan menggunakanlet assignmentsO = self.assignments.sort({ $0.order < $1.order })
Swift 4.0, 4.1 & 4.2 Pertama, saya membuat array bertipe typeFileFile () seperti yang ditunjukkan di bawah ini
Buat gambar objek yang dapat diubah dari tipe imageFile () dan berikan nilai pada properti seperti yang ditunjukkan di bawah ini
Sekarang, tambahkan objek ini ke array array
Sekarang, tetapkan properti yang berbeda untuk objek yang bisa berubah yaitu gambar
Sekarang, lagi-lagi tambahkan objek gambar ke array array
Sekarang, kita akan menerapkan urutan naik pada properti fileId di objek array array. Gunakan <simbol untuk urutan naik
Sekarang, kita akan menerapkan urutan Descending pada properti fileId di objek array array. Gunakan > simbol untuk urutan Descending
Dalam Swift 4.1. & 4.2 Untuk penggunaan pesanan yang diurutkan
sumber
Jika Anda akan mengurutkan array ini di lebih dari satu tempat, mungkin masuk akal untuk membuat tipe array Anda Sebanding.
sumber
Jika Anda tidak menggunakan objek kustom, tetapi sebaliknya tipe nilai yang mengimplementasikan protokol Sebanding (Int, String dll.) Anda bisa melakukan ini:
Sebuah contoh:
sumber
myArray.sorted(by: >)
Anda mengembalikan array yang diurutkan dari properti fileID dengan cara berikut:
Cepat 2
Cepat 3 ATAU 4
Swift 5.0
sumber
Saya melakukannya seperti ini dan berfungsi:
var images = [imageFile]() images.sorted(by: {$0.fileID.compare($1.fileID) == .orderedAscending })
sumber
Jika Anda ingin mengurutkan array asli objek kustom. Berikut cara lain untuk melakukannya di Swift 2.1
Dimana
id
Integer. Anda dapat menggunakan<
operator yang sama untukString
properti juga.Anda dapat mempelajari lebih lanjut tentang penggunaannya dengan melihat contoh di sini: Swift2: Pelanggan Terdekat
sumber
Cetakan:
"["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"
sumber
Swift 3 & 4 & 5
Saya memiliki beberapa masalah terkait dengan huruf kecil dan huruf besar
jadi saya melakukan kode ini
dan kemudian gunakan SortImages setelah itu
sumber
Sortir menggunakan KeyPath
Anda dapat mengurutkan berdasarkan
KeyPath
ini:Dengan menerapkan ekstensi kecil yang bermanfaat ini.
Hope Swift menambahkan ini dalam waktu dekat di inti bahasa.
sumber
public extension MutableCollection where Self: RandomAccessCollection { mutating func sort<T>(_ keyPath: KeyPath<Element, T>, by areInIncreasingOrder: (T, T) throws -> Bool) rethrows where T: Comparable { try sort { try areInIncreasingOrder($0[keyPath: keyPath], $1[keyPath: keyPath]) } }}