Saya memiliki Dictionary
di Swift dan saya ingin mendapatkan kunci pada indeks tertentu.
var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>()
Saya tahu bahwa saya dapat mengulang kunci dan mencatatnya
for key in myDict.keys{
NSLog("key = \(key)")
}
Namun, anehnya, hal seperti ini tidak mungkin dilakukan
var key : String = myDict.keys[0]
Kenapa?
ios
dictionary
swift
the_critic
sumber
sumber
Jawaban:
Itu karena
keys
pengembalianLazyMapCollection<[Key : Value], Key>
, yang tidak bisa dilanggan denganInt
. Salah satu cara untuk mengatasinya adalah dengan memajukan kamusstartIndex
dengan bilangan bulat yang ingin Anda gunakan untuk subskrip, misalnya:Solusi lain yang mungkin adalah menginisialisasi array dengan
keys
sebagai input, kemudian Anda dapat menggunakan subskrip integer pada hasilnya:Ingat, kamus pada dasarnya tidak berurutan, jadi jangan berharap kunci pada indeks tertentu selalu sama.
sumber
Array(myDict)[0].0
karena tidak akan menyalin larik kunci, dan seharusnya tidak menyalin struktur internal kamus, meskipun mungkin.myDict[keysArray[0]]
.'NSDictionary' is not convertible to '_ArrayBuffer<T>'
Swift 3:
Array()
dapat berguna untuk melakukan ini.Dapatkan Kunci:
Dapatkan Nilai:
sumber
["a": 1, "b": 2]
, dapat diubah menjadi sebuah susunan kamus seperti[[key: "a", value: 1], [key: "b", value: 2]]
, ini kemudian dapat diakses oleh indeks.Berikut adalah ekstensi kecil untuk mengakses kunci dan nilai dalam kamus dengan indeks:
sumber
Anda dapat mengulangi kamus dan mengambil indeks dengan for-in dan enumerate (seperti yang dikatakan orang lain, tidak ada jaminan itu akan keluar dengan urutan seperti di bawah)
Jika Anda ingin menyortir dulu ..
lalu lakukan iterasi.
Jika Anda ingin membuat kamus berurutan, Anda harus melihat ke Generik.
sumber
dict.enumerated().forEach { (index, element) in ... }
Dari https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/CollectionTypes.html :
Jika Anda perlu menggunakan kunci atau nilai kamus dengan API yang mengambil instance Array, inisialisasi array baru dengan properti keys atau values:
sumber
SWIFT 3. Contoh elemen pertama
sumber
Di Swift 3 coba gunakan kode ini untuk mendapatkan Key-Value Pair (tuple) pada indeks yang diberikan:
sumber
Berikut ini contohnya, menggunakan Swift 1.2
sumber
SWIFT 4
Agak di luar topik: Tapi di sini jika Anda memiliki Array Kamus, misalnya : [[String: String]]
sumber
Saya mencari sesuatu seperti LinkedHashMap di Java. Baik Swift maupun Objective-C tidak memilikinya jika saya tidak salah.
Pikiran awal saya adalah membungkus kamus saya dalam Array.
[[String: UIImage]]
tapi kemudian saya menyadari bahwa mengambil kunci dari kamus itu anehArray(dict)[index].key
jadi saya pergi dengan Tuple. Sekarang array saya terlihat seperti[(String, UIImage)]
sehingga saya dapat mengambilnya kembalituple.0
. Tidak ada lagi mengubahnya menjadi Array. Hanya 2 sen saya.sumber