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?


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]

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 )

1
Autosuggest states [Double] (repeatElement (3.22, count: 5)), ainda explicitamente digitar (repetir, contar) parece ser válido
Ashwin G
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.