จะเริ่มต้นสมาชิกทั้งหมดของอาร์เรย์ให้มีค่าเดียวกันใน Swift ได้อย่างไร


88

ฉันมีอาร์เรย์ขนาดใหญ่ใน Swift ฉันต้องการเริ่มต้นสมาชิกทั้งหมดด้วยค่าเดียวกัน (เช่นอาจเป็นศูนย์หรือค่าอื่น ๆ ) แนวทางที่ดีที่สุดคืออะไร?


2
สร้างอาร์เรย์วนซ้ำองค์ประกอบทั้งหมดและตั้งค่าแต่ละองค์ประกอบเช่นเดียวกับที่คุณทำในภาษาโปรแกรมอื่น ๆ
Robert Harvey

19
var a = Array(count:100, repeatedValue:0)คือคำตอบสำหรับคำถามที่ถูกต้องนี้
Rod

@ รอดฉันจะลองดู หากคำถามถูกเปิดอีกครั้งคุณสามารถโพสต์เป็นคำตอบได้
m_power

2
การวนซ้ำเป็นอย่างน้อยลำดับความสำคัญช้ากว่าการใช้คณิตศาสตร์เวกเตอร์
μολὼν.λαβέ

คำตอบ:


178

อันที่จริงมันค่อนข้างง่ายสำหรับ Swift ดังที่กล่าวไว้ในเอกสารของ Appleคุณสามารถเริ่มต้นอาร์เรย์ด้วยค่าที่ซ้ำกันเช่นนี้:

ด้วยSwift เวอร์ชันเก่า :

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

ตั้งแต่Swift 3.0 :

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

ซึ่งจะให้:

[0.0, 0.0, 0.0]

16
ดูเหมือนว่าใน Swift3 จะเปลี่ยนเป็นvar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr

ฉันได้ค้นพบว่านี่เป็นเรื่องตลกจริงๆอาร์เรย์ 16MB ใช้เวลาไม่กี่วินาทีในการล้างด้วยวิธีนี้ ใน C memset(p, 0, 16*1024*1024)นั้นแทบจะเกิดขึ้นทันที
wcochran

@wcochran คุณค้นพบวิธีที่ดีกว่านี้หรือไม่?
StephenBoesch

@javadba Nope. ยังคงแปลกใจที่ไม่มีกลไกที่มีประสิทธิภาพในการทำสิ่งนี้ใน Swift เมื่อฮาร์ดแวร์สามารถทำได้เร็วขนาดนี้ อาจคุ้มค่าที่จะตรวจสอบแหล่งที่มา
wcochran

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.