Làm cách nào để khởi tạo tất cả các thành viên của một mảng thành cùng một giá trị trong Swift?


87

Tôi có một mảng lớn trong Swift. Tôi muốn khởi tạo tất cả các thành viên thành cùng một giá trị (tức là nó có thể bằng 0 hoặc một số giá trị khác). Cách tiếp cận tốt nhất sẽ là gì?


2
Tạo mảng, lặp qua tất cả các phần tử và đặt từng phần tử, giống như bạn làm trong bất kỳ ngôn ngữ lập trình nào khác.
Robert Harvey

19
var a = Array(count:100, repeatedValue:0)chính xác là câu trả lời cho câu hỏi hợp lệ này.
Rod

@Rod, tôi sẽ thử điều đó. Nếu câu hỏi được mở lại, bạn có thể đăng nó như một câu trả lời.
m_power

2
Vòng lặp chậm hơn ít nhất là một bậc lớn hơn so với sử dụng toán học vectơ.
μολὼν.λαβέ

Câu trả lời:


174

Trên thực tế, nó khá đơn giản với Swift. Như đã đề cập trong tài liệu của Apple , bạn có thể khởi tạo một mảng có cùng giá trị lặp lại như sau:

Với phiên bản Swift cũ :

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

Kể từ Swift 3.0 :

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

sẽ cho:

[0.0, 0.0, 0.0]

16
Dường như trong Swift3 nó đổi thànhvar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr

Tôi đã phát hiện ra điều này thực sự là sloooooooow, một mảng 16MB mất vài giây để xóa theo cách này. Trong C, memset(p, 0, 16*1024*1024)thực tế là tức thời.
wcochran

@wcochran Bạn có phát hiện ra cách tốt hơn để thực hiện việc này không?
javadba

@javadba Không. Vẫn còn ngạc nhiên là không có cơ chế hiệu quả nào để thực hiện điều này trong Swift khi phần cứng có thể thực hiện điều này nhanh chóng. Có lẽ nó đáng để điều tra nguồn.
wcochran

36

Đây sẽ là câu trả lời trong Swift 3:

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

1
Bang autosuggest [đúp] (repeatElement (3.22, đếm: 5)), vẫn còn một cách rõ ràng gõ (lặp đi lặp lại, đếm) có vẻ là hợp lệ
Ashwin G
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.