¿Cómo inicializar todos los miembros de una matriz con el mismo valor en Swift?

87

Tengo una gran variedad en Swift. Quiero inicializar todos los miembros con el mismo valor (es decir, podría ser cero o algún otro valor). ¿Cuál sería el mejor enfoque?

m_power
fuente
2
Cree la matriz, recorra todos los elementos y configure cada uno, como lo haría en cualquier otro lenguaje de programación.
Robert Harvey
19
var a = Array(count:100, repeatedValue:0)es exactamente la respuesta a esta pregunta válida.
Rod
@ Rod, intentaré eso. Si se vuelve a abrir la pregunta, puede publicarla como respuesta.
m_power
2
El bucle es al menos un orden de magnitud más lento que el uso de matemáticas vectoriales.
μολὼν.λαβέ

Respuestas:

174

De hecho, es bastante simple con Swift. Como se menciona en el documento de Apple , puede inicializar una matriz con el mismo valor repetido como este:

Con la versión antigua de Swift :

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

Desde Swift 3.0 :

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

lo que daría:

[0.0, 0.0, 0.0]
moumoute6919
fuente
16
Parece que en Swift3 cambió avar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr
He descubierto que esto es realmente lento, una matriz de 16 MB tarda unos segundos en despejarse de esta manera. En C, memset(p, 0, 16*1024*1024)es prácticamente instantáneo.
wcochran
@wcochran ¿Descubrió una mejor manera de hacer esto?
StephenBoesch
@javadba Nope. Todavía me sorprende que no haya un mecanismo eficiente para hacer esto en Swift cuando el hardware puede hacerlo rápido. Quizás valga la pena investigar la fuente.
wcochran
36

Esta sería una respuesta en Swift 3:

var threeDoubles = [Double]( repeating: 0.0, count: 3 )
arauter
fuente
1
Los estados de autosugestión [Double] (repeatElement (3.22, count: 5)), aún escribir explícitamente (repitiendo, count) parece ser válido
Ashwin G