Jak zainicjować wszystkie elementy tablicy do tej samej wartości w Swift?

87

Mam dużą tablicę w języku Swift. Chcę zainicjować wszystkich członków do tej samej wartości (tj. Może to być zero lub inna wartość). Jakie byłoby najlepsze podejście?

m_power
źródło
2
Utwórz tablicę, przejrzyj wszystkie elementy i ustaw każdy z nich, tak jak w każdym innym języku programowania.
Robert Harvey
19
var a = Array(count:100, repeatedValue:0)jest dokładnie odpowiedzią na to ważne pytanie.
Rod
@Rod, spróbuję tego. Jeśli pytanie zostanie ponownie otwarte, możesz opublikować je jako odpowiedź.
m_power,
2
Zapętlanie jest co najmniej o rząd wielkości wolniejsze niż przy użyciu matematyki wektorowej.
μολὼν.λαβέ

Odpowiedzi:

174

Właściwie w Swift jest to całkiem proste. Jak wspomniano w dokumencie Apple , możesz zainicjować tablicę z taką samą powtarzającą się wartością, jak poniżej:

Ze starą wersją Swift :

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

Od wersji Swift 3.0 :

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

co dałoby:

[0.0, 0.0, 0.0]
moumoute6919
źródło
16
Wygląda na to, że w Swift3 zmieniło się tovar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr
Odkryłem, że jest to naprawdę powolne, wyczyszczenie tablicy 16 MB w ten sposób zajmuje kilka sekund. W C memset(p, 0, 16*1024*1024)jest praktycznie natychmiastowe.
wcochran
@wcochran Czy znalazłeś lepszy sposób na zrobienie tego?
StephenBoesch
@javadba Nope. Wciąż zdziwiony, że w Swift nie ma skutecznego mechanizmu, gdy sprzęt może to zrobić szybko. Może warto zbadać źródło.
wcochran
36

To byłaby odpowiedź w Swift 3:

var threeDoubles = [Double]( repeating: 0.0, count: 3 )
arauter
źródło
1
Stany autosugestii [Double] (repeatElement (3.22, count: 5)), nadal jawne wpisywanie (powtarzanie, liczenie) wydaje się prawidłowe
Ashwin G