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?


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]

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 )

1
Stany autosugestii [Double] (repeatElement (3.22, count: 5)), nadal jawne wpisywanie (powtarzanie, liczenie) wydaje się prawidłowe
Ashwin G
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.