¿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?


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]

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 )

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.