Saya memiliki banyak kamus.
Saya ingin memfilter array berdasarkan kunci.
Saya mencoba ini:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"];
NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];
Ini tidak berhasil, saya tidak mendapatkan hasil. Saya pikir saya melakukan sesuatu yang salah. Saya tahu ini adalah metode jika "OLAHRAGA" adalah ivar. Saya pikir itu mungkin berbeda jika itu adalah kunci.
Namun saya belum dapat menemukan contoh.
Terima kasih
Memperbarui
Saya menambahkan tanda kutip di sekitar string yang saya cari.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"];
Masih tidak bekerja.
Perbarui 2
Pecahkan itu. Saya sebenarnya harus menghapus tanda kutip tunggal, yang tampaknya bertentangan dengan apa yang dikatakan panduan.
Masalah sebenarnya saya adalah saya memiliki array bersarang dan saya tidak benar-benar mengevaluasi kamus. Gerakan kepala tulang.
objective-c
cocoa
nsarray
nsdictionary
nspredicate
Corey Floyd
sumber
sumber
Jawaban:
Ini harus berfungsi - selama variabel data sebenarnya adalah array yang berisi kamus dengan kunci SPORT
Difilter dalam hal ini berisi kamus.
(% @ tidak harus dikutip, ini dilakukan saat NSPredicate membuat objek.)
sumber
Saya tahu itu berita lama tetapi menambahkan dua sen saya. Secara default saya menggunakan perintah
LIKE[cd]
daripada hanya[c]
. The[d]
membandingkan huruf dengan simbol aksen. Ini bekerja sangat baik di Aplikasi Warcraft saya di mana orang mengeja nama mereka "Vòódòó" sehingga hampir tidak mungkin untuk mencari nama mereka dalam tampilan tabel. The[d]
strip simbol aksen mereka selama predikat. Jadi sebuah predikat@"name LIKE[CD] %@", object.name
dimanaobject.name == @"voodoo"
akan mengembalikan objek yang mengandung nama Vòódòó.Dari dokumentasi Apple: like [cd] berarti “case- and diacritic-insensitive like”.) Untuk penjelasan lengkap tentang sintaks string dan daftar semua operator yang tersedia, lihat Format Predikat Sintaksis String .
sumber
sumber
NSPredicate
hanya tersedia di iPhone 3.0.Anda tidak akan menyadarinya sampai mencoba menjalankan di perangkat.
sumber
Dengan Swift 3, saat Anda ingin memfilter array kamus dengan predikat berdasarkan kunci dan nilai kamus, Anda dapat memilih salah satu pola berikut.
# 1. Menggunakan
NSPredicate
init(format:arguments:)
penginisialisasiJika Anda berasal dari Objective-C,
init(format:arguments:)
menawarkan gaya pengkodean nilai kunci untuk mengevaluasi predikat Anda.Pemakaian:
# 2. Menggunakan
NSPredicate
init(block:)
penginisialisasiSebagai alternatif jika Anda lebih suka API yang diketik dengan kuat daripada API yang diketik dengan string , Anda dapat menggunakan
init(block:)
penginisialisasi.Pemakaian:
sumber
Melihat referensi NSPredicate , sepertinya Anda perlu mengelilingi karakter substitusi Anda dengan tanda kutip. Misalnya, predikat Anda saat ini berbunyi:
(SPORT == Football)
Anda ingin membaca(SPORT == 'Football')
, jadi format string Anda harus@"(SPORT == '%@')"
.sumber