Sebuah NSSet
dapat dikonversi menjadi Array
menggunakan set.allObjects()
tetapi tidak ada metode seperti itu di baru Set
(diperkenalkan dengan Swift 1.2). Itu masih bisa dilakukan dengan mengonversi Swift Set ke NSSet dan menggunakanallObjects()
metode ini tetapi itu tidak optimal.
187
let array = Array(someSet)
juga bekerja di Swift 2NSSet
diberikan. Pertanyaannya adalah tentang SwiftSet
.Dalam kasus yang paling sederhana , dengan Swift 3, Anda dapat menggunakan
Array
'sinit(_:)
initializer untuk mendapatkanArray
dariSet
.init(_:)
memiliki deklarasi berikut:Pemakaian:
Namun , jika Anda juga ingin melakukan beberapa operasi pada setiap elemen dari Anda
Set
sementara mengubahnya menjadi sebuahArray
, Anda dapat menggunakanmap
,flatMap
,sort
,filter
dan metode fungsional lain yang disediakan olehCollection
protokol:sumber
TAMBAHAN:
Swift tidak memiliki DEFINED ORDER untuk Set dan Kamus. Untuk alasan itu Anda harus menggunakan metode sortir () untuk mencegah dari mendapatkan hasil yang tidak terduga seperti array Anda dapat seperti ["a", "b"] atau ["b", "a "] dan kamu tidak menginginkan ini.
UNTUK MEMPERBAIKI INI:
UNTUK SET
Hasil: ["a", "b", "c"]
Tanpa diurutkan ()
Itu bisa:
matematika sederhana: 3! = 6
sumber
Saya membuat ekstensi sederhana yang memberi Anda unsorted
Array
sebagai propertiSet
di Swift 4.0 .Jika Anda menginginkan array yang diurutkan, Anda bisa menambahkan properti yang dihitung tambahan, atau memodifikasi yang sudah ada sesuai dengan kebutuhan Anda.
Untuk menggunakan ini, telepon saja
sumber
Jawaban saat ini untuk Swift 2.x dan lebih tinggi (dari panduan Bahasa Pemrograman Swift pada Jenis Koleksi) tampaknya beralih ke entri Set seperti:
Atau, untuk menggunakan metode "diurutkan":
Tampaknya perancang Swift tidak menyukai allObjects sebagai mekanisme akses karena Set tidak benar-benar dipesan, jadi mereka ingin memastikan Anda tidak keluar dari array tanpa penerapan pemesanan eksplisit.
Jika Anda tidak ingin overhead penyortiran dan tidak peduli dengan pesanan, saya biasanya menggunakan metode peta atau flatMap yang seharusnya sedikit lebih cepat untuk mengekstrak array:
Yang akan membangun larik tipe yang disimpan Set, jika Anda memerlukannya menjadi larik tipe tertentu (katakanlah, hak dari kumpulan relasi objek terkelola yang tidak dideklarasikan sebagai set yang diketik) Anda dapat melakukan sesuatu seperti:
sumber
myItemSet.sorted()
mensyaratkan bahwa unsur-unsurnyaComparable
. -myItemSet.map { $0 }
Harus menghasilkan hasil yang sama sepertiArray(myItemSet)
, keduanya membuat array dengan menghitung semua elemen set. Yang terakhir masih bekerja untuk saya, beberapa detail pada komentar Anda di atas akan dihargai.panggil metode ini dan lulus set Anda
Seperti ini :
sumber