Bir dizinin tüm üyelerini Swift'de aynı değere nasıl başlatabilirim?


88

Swift'de geniş bir dizim var. Tüm üyeleri aynı değerle başlatmak istiyorum (yani sıfır veya başka bir değer olabilir). En iyi yaklaşım ne olurdu?


2
Diğer programlama dillerinde yaptığınız gibi diziyi oluşturun, tüm öğeler arasında döngü yapın ve her birini ayarlayın.
Robert Harvey

19
var a = Array(count:100, repeatedValue:0)tam olarak bu geçerli sorunun cevabıdır.
Rod

@Rod, bunu deneyeceğim. Soru yeniden açılırsa, cevap olarak gönderebilirsiniz.
m_power

2
Döngü, vektör matematiğini kullanmaktan en azından bir büyüklük sırası daha yavaştır.
μολὼν.λαβέ

Yanıtlar:


178

Aslında Swift ile oldukça basit. Apple'ın belgesinde belirtildiği gibi, aşağıdaki gibi aynı tekrarlanan değerle bir diziyi başlatabilirsiniz:

İle eski Swift sürümü :

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

Swift 3.0'dan beri :

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

hangisi verir:

[0.0, 0.0, 0.0]

16
Görünüşe göre Swift3'te bu değiştivar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr

Bunun gerçekten sloooooooow olduğunu keşfettim, 16MB'lik bir dizinin bu şekilde temizlenmesi saniyeler sürüyor. C'de, memset(p, 0, 16*1024*1024)pratik olarak anlıktır.
wcochran

@wcochran Bunu yapmanın daha iyi bir yolunu keşfettiniz mi?
StephenBoesch

@javadba Hayır. Donanım bunu hızlı bir şekilde yapabildiğinde Swift'de bunu yapacak etkili bir mekanizma olmadığına yine de şaşırdım. Belki kaynağı araştırmaya değer.
wcochran

36

Bu, Swift 3'te bir cevap olabilir:

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

1
Otomatik önerme durumu [Double] (tekrar Element (3.22, sayım: 5)), hala açıkça yazıyor (yineleniyor, sayılıyor)
Ashwin G
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.