Bagaimana cara menginisialisasi semua anggota array ke nilai yang sama di Swift?


88

Saya memiliki banyak pilihan di Swift. Saya ingin menginisialisasi semua anggota dengan nilai yang sama (misalnya bisa nol atau nilai lain). Apa pendekatan terbaik?


2
Buat array, ulangi semua elemen dan atur masing-masing, seperti yang Anda lakukan dalam bahasa pemrograman lainnya.
Robert Harvey

19
var a = Array(count:100, repeatedValue:0)adalah jawaban yang tepat untuk pertanyaan yang valid ini.
Batang

@ Rod, saya akan mencobanya. Jika pertanyaan dibuka kembali, Anda dapat mempostingnya sebagai jawaban.
m_power

2
Perulangan setidaknya urutan besarnya lebih lambat daripada menggunakan matematika vektor.
μολὼν.λαβέ

Jawaban:


178

Sebenarnya, cukup sederhana dengan Swift. Seperti yang disebutkan di Apple , Anda dapat menginisialisasi array dengan nilai berulang yang sama seperti ini:

Dengan versi Swift lama :

var threeDoubles = [Double](count: 3, repeatedValue: 0.0)

Sejak Swift 3.0 :

var threeDoubles = [Double](repeating: 0.0, count: 3)

yang akan memberikan:

[0.0, 0.0, 0.0]

16
Tampaknya di Swift3 itu berubah menjadivar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr

Saya telah menemukan ini benar-benar sloooooooow, array 16MB membutuhkan beberapa detik untuk menghapus dengan cara ini. Di C, memset(p, 0, 16*1024*1024)praktis seketika.
wcochran

@wcochran Apakah Anda menemukan cara yang lebih baik untuk melakukan ini?
StephenBoesch

@javba Tidak. Masih terkejut tidak ada mekanisme yang efisien untuk melakukan ini di Swift ketika perangkat keras dapat melakukannya dengan cepat. Mungkin ada baiknya menyelidiki sumbernya.
wcochran

36

Ini akan menjadi jawaban di Swift 3:

var threeDoubles = [Double]( repeating: 0.0, count: 3 )

1
Autosuggest menyatakan [Double] (repeatElement (3.22, count: 5)), masih secara eksplisit mengetik (berulang, hitung) tampaknya valid
Ashwin G
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.