Como inicializar todos os membros de uma matriz com o mesmo valor em Swift?

86

Eu tenho uma grande variedade em Swift. Quero inicializar todos os membros com o mesmo valor (ou seja, pode ser zero ou algum outro valor). Qual seria a melhor abordagem?

m_power
fonte
2
Crie a matriz, faça um loop por todos os elementos e defina cada um, como faria em qualquer outra linguagem de programação.
Robert Harvey
18
var a = Array(count:100, repeatedValue:0)é exatamente a resposta a esta pergunta válida.
Rod
@Rod, vou tentar isso. Se a pergunta for reaberta, você poderá postá-la como uma resposta.
m_power
2
O loop é pelo menos uma ordem de magnitude mais lento do que o uso da matemática vetorial.
μολὼν.λαβέ

Respostas:

169

Na verdade, é bastante simples com o Swift. Conforme mencionado no documento da Apple , você pode inicializar uma matriz com o mesmo valor repetido como este:

Com a versão antiga do Swift :

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

Desde Swift 3.0 :

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

que daria:

[0.0, 0.0, 0.0]
moumoute6919
fonte
16
Parece que no Swift3 mudou paravar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr
Eu descobri que isso é realmente lento, um array de 16 MB leva segundos para limpar dessa forma. Em C, memset(p, 0, 16*1024*1024)é praticamente instantâneo.
wcochran
@wcochran Você descobriu uma maneira melhor de fazer isso?
javadba
@javadba Nope. Ainda estou surpreso por não haver um mecanismo eficiente para fazer isso no Swift quando o hardware pode fazer isso rapidamente. Talvez valha a pena investigar a fonte.
wcochran
36

Esta seria uma resposta no Swift 3:

var threeDoubles = [Double]( repeating: 0.0, count: 3 )
Arauter
fonte
1
Autosuggest states [Double] (repeatElement (3.22, count: 5)), ainda explicitamente digitar (repetir, contar) parece ser válido
Ashwin G